dopar
我在注册时遇到了在函数内部运行的问题doRNG
,我需要访问在函数内部创建的变量。
我在这里的总体目标是用来doRNG
确保我的并行进程获得不同的随机数流,所以如果有更好的方法来做到这一点,这也将解决我的问题。
其次,我对使用doRNG
失败的原因感兴趣,因为我试图了解环境如何导出到并行进程。
这里的代码看起来有点做作,但这是对更大更复杂的代码的总结。
library(doParallel)
library(foreach)
cl <- makePSOCKcluster(2)
registerDoParallel(cl)
#if I comment out these two lines, code runs fine
library(doRNG)
registerDoRNG()
gVar <- 'gVar'
cols <- matrix(1:10,nrow=2)
res <- apply(cols,2,
function(col) {
lclVar <- sum(col)
res <- foreach(i=icount(2),
.export=c('gVar'), #'lclVar'
.combine='c') %dopar% { #change to %do% also works
return(sprintf('%s %s %s',gVar,lclVar,i))
}
return(res)
})
print(res)
stopCluster(cl)
请注意,如果我注释掉这些doRNG
行,代码运行良好。也从%dopar%
to更改为%do%
(并保留doRNG
未注释的行)作品。
我得到以下信息:
Error in { : task 1 failed - "object 'lclVar' not found"