[英]What is the alternative instruction instead of writing many nested for loop in R?
我有29个矩阵。 我需要编写29个嵌套循环,在最后一个循环中,我应该在29个字的字符串上调用一个函数。 但是编写29个循环非常耗时。 另外,我必须在另一个R
代码中重复此过程。 我正在寻找实现这些循环的替代方法。 我解释的代码如下。 m1
到m29
是矩阵,而make_rule_antc
是我在矩阵的每个元素上调用的函数:
for (i1 in 1:nrow(m1)){
for (i2 in 1:nrow(m2)){
for (i3 in 1:nrow(m3)){
.
.
.
for (i29 in 1:nrow(m29)){
make_rule_antc(m1[i1,],m2[i2,],m3[i3,],...,m29[i29,])
}
}
}
}
我认为应该是这样的:
m1=matrix(c(1,2,3,4), nrow = 2)
m2=matrix(c(1,2,3,4), nrow = 2)
m3=matrix(c(1,2,3,4), nrow = 2)
ms=list(m1,m2,m3)
idx=expand.grid(lapply(ms,FUN=function(x) seq(1,nrow(x))))
body=function(x) {
arglist=list()
for (i in 1:length(x))
arglist[[i]]=ms[[i]][x[i],]
do.call(make_rule_antc, arglist)
}
apply(idx,MARGIN = 1, FUN=body)
@ cyberj0g解决方案可以简化为此
m1 <- matrix(c(1,2,3,4), nrow = 2)
m2 <- matrix(c(1,2,3,4), nrow = 2)
m3 <- matrix(c(1,2,3,4), nrow = 2)
ms <- list(m1, m2, m3)
rows <- sapply(ms, nrow)
combination <- expand.grid(lapply(rows, seq_len))
apply(combination, 1, function(x){
do.call(make_rule_antc, as.list(x))
})
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.