使用foreach包并行执行并将结果写入矩阵

时间:2014-04-18 10:59:07

标签: r foreach parallel-processing

我使用(foreach)库为并行循环编写了以下代码,代码似乎工作正常(并行执行)。但是,我在写入变量BestLoops时面临一个问题,因为在执行之后我总是将矩阵清空,所以看起来它并没有在并行化过程中写任何东西,任何有关如何克服这个问题的帮助都非常感谢以下是我的脚本的简化版本:

library("foreach")
library("doSNOW") 
N=10000
cl=5
BestLoops=matrix(0,N,2) 
registerDoSNOW(makeCluster(cl, type="SOCK"))
foreach(i=1:N) %dopar% {
BestLoops[i,]=c(2,3)
#plus many other codes in this part, but just consider this one line   (before) just for simplicity
}

1 个答案:

答案 0 :(得分:2)

使用doParallel可以使用rbind

组合结果
library(doParallel)
N=100000
nworkers <- detectCores()
cl <- makePSOCKcluster(nworkers)
registerDoParallel(cl)

step <- ceiling(N/nworkers)

BestLoops <- foreach(start_from=seq(1, N, step),
                     .combine='rbind') %dopar% {
                       mat <- matrix(0,step,2)
                       i <- 1
                       for(j in start_from:(start_from+step-1)) {
                         mat[i,]=c(j,3)
                         i <- i +1
                       }
                       mat
                     }

您只需对每个工作人员执行代码,但每个工作人员使用较少的迭代次数。