每次迭代后的foreach循环更新矩阵R

时间:2016-04-12 09:12:22

标签: r loops matrix foreach parallel-processing

我有一个for循环,我希望并行运行,所以我使用foreach来执行此操作。

我的循环中的一个输出是一个包含所有迭代结果的矩阵。如果我使用for循环,那么这个矩阵会被顺序更新,并且可以在最后输出。但是,使用foreach时,似乎无法更新此内容。

例如,我已经汇总了一个简单的例子,说明了我的观点。

# foreach example - does not update DF matrix.
cl=makeCluster(4)
registerDoParallel(cl)
DF=matrix(NA,ncol=5,nrow=10)
foreach(i=1:10) %dopar% {
  DF[i,1]=i*1
  DF[i,2]=i*2
  DF[i,3]=i*3
  DF[i,4]=i*4
  DF[i,5]=i*5
}

# for loop - Updates DF and produces complete output.
DF=matrix(NA,ncol=5,nrow=10)
for(i in 1:10) {
  DF[i,1]=i*1
  DF[i,2]=i*2
  DF[i,3]=i*3
  DF[i,4]=i*4
  DF[i,5]=i*5
}

我觉得我可能需要在DF命令中指定foreach数据框,就像我需要使用的任何软件包一样(例如{{1}但是我还没有成功地完成这项工作。

1 个答案:

答案 0 :(得分:1)

可以选择在foreach循环中组合结果。你可以用它。理想情况下,您需要两个for循环来填充矩阵。例如,

x <- foreach(i=1:10,.combine = rbind) %do% {
    foreach(j=1:10,.combine=c)%do%{
         j
    }
}

这将创建一个矩阵。希望这有助于获得一个想法