Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在R中编写许多嵌套for循环的替代指令是什么?_R_String_For Loop_Matrix - Fatal编程技术网

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

在R中编写许多嵌套for循环的替代指令是什么?,r,string,for-loop,matrix,R,String,For Loop,Matrix,我有29个矩阵。我需要编写29个嵌套循环,在最后一个循环中,我应该调用29个单词字符串上的函数。但是写29个循环很耗时。另外,我必须在另一个Rcode中重复此过程。我正在寻找实现这些循环的替代方法。 我解释的代码如下m1tom29是矩阵,而make_rule_antc是我在矩阵的每个元素上调用的函数: for (i1 in 1:nrow(m1)){ for (i2 in 1:nrow(m2)){ for (i3 in 1:nrow(m3)){

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

我认为应该是这样的:

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))
})

m1@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))
})

m1你能详细说明你想做什么吗?我们的矩阵有多大?一个更好的方法可能是先做一些数据重塑。你能详细说明你想要做什么吗?我们的矩阵有多大?更好的方法可能是先进行一些数据重塑。如果
nrow(x)=0,这将失败。如果
nrow(x)=0,这将失败。您只是将索引传递给OP的
make_rule_antc
,而不是实际的矩阵行。不过,我相信我的解决方案可以简化。你和@cyberj0g能解释一下为什么m1、m2和m3是这样生成的吗?我有29个矩阵。我应该如何在代码中使用它们?既然已经有m1…m29,只需将它们添加到
ms
中的列表中,如下所示:ms=list(m1,m2,m3,m4,…,m29)您只是将索引传递给OP的
make_rule_antc
,而不是实际的矩阵行。不过,我相信我的解决方案可以简化。你和@cyberj0g能解释一下为什么m1、m2和m3是这样生成的吗?我有29个矩阵。我应该如何在您的代码中使用它们?假设您已经有m1…m29,只需将它们添加到
ms
中的列表中,如下所示:ms=list(m1,m2,m3,m4,…,m29)