foreach:代码使用%do%和%dopar%生成不同的结果

时间:2017-07-18 01:12:02

标签: r parallel-processing doparallel parallel-foreach

作为免责声明,这是我的第一篇文章,我欢迎对未来适当发布的任何建设性批评。

我的函数输入是一个数组。当我使用foreach的%do%选项输入数组时,我得到了所需的输出数组。我搜索了各种foreach线程,并没有发现类似的问题。但是,当我运行%dopar%选项时,我只返回输入数组。这是我的代码的基本概述;我可以发布完整的脚本,如果这是最好的,但它很长。最后,我将把数组缩放到一个大小,为了时间的推移,必须同时进行计算。

#libraries for constructing a parallel for loop
library(foreach)
library(doParallel)
cores <- detectCores()-1
#establish cluster
cl <- makeCluster(cores)
#to register the doparallel backend
registerDoParallel(cl,cores=7)

#input array
Q <- matrix(0,20,20)
Q[1:5,1:5] <- 2

#function in question....
dyn_rec_proto20_parallel <- function(vegmat){
distance <- matrix(0,length(vegmat[1,]),length(vegmat[1,]))
recruitment_prob_mat <- matrix(0,length(vegmat[1,]),length(vegmat[1,]))
foreach(i=1:length(vegmat[1,]),.export = c('IDW_scoring','roll_for_rec','Q','ageing20_parallel' ),)%dopar%{
for(j in 1:length(vegmat[1,])){
  if(vegmat[i,j]==0){ #do a bunch of updates to vegmat
  }
  }
return(vegmat)
}

0 个答案:

没有答案