繁体   English   中英

什么是替代指令而不是在R中编写许多嵌套的for循环?

[英]What is the alternative instruction instead of writing many nested for loop in R?

我有29个矩阵。 我需要编写29个嵌套循环,在最后一个循环中,我应该在29个字的字符串上调用一个函数。 但是编写29个循环非常耗时。 另外,我必须在另一个R代码中重复此过程。 我正在寻找实现这些循环的替代方法。 我解释的代码如下。 m1m29是矩阵,而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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM