我有一个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}但是我还没有成功地完成这项工作。
答案 0 :(得分:1)
可以选择在foreach循环中组合结果。你可以用它。理想情况下,您需要两个for循环来填充矩阵。例如,
x <- foreach(i=1:10,.combine = rbind) %do% {
foreach(j=1:10,.combine=c)%do%{
j
}
}
这将创建一个矩阵。希望这有助于获得一个想法