我正在尝试使用 doRedis 创建一个 R 集群并使用 foreach 并行处理我的一些计算,但一直遇到错误。我的代码适用于 foreach %do% 但是当我尝试使用 %dopar% 在集群上运行时它失败了。我还尝试在 doRedis 文档中运行示例代码,但也失败了。下面是我的主脚本和工作人员的 R 控制台:
主 R 控制台:
> require('doRedis')
> registerDoRedis('work')
> getDoParWorkers()
[1] 2
> foreach(j=1:10,.combine=sum,.multicombine=TRUE) %dopar%
+ 4*sum((runif(1000000)^2 + runif(1000000)^2)<1)/10000000
[1] "interrupt: \n"
Error in tryCatchOne(expr, names, parentenv, handlers[[1L]]) :
attempt to apply non-function
In addition: Warning message:
In e$fun(obj, substitute(ex), parent.frame(), e$data) :
Queue length off by 10...correcting
工作人员控制台:
> require('doRedis')
> redisWorker('work')
Waiting for doRedis jobs.
Processing job 3 from queue work
Error in names(z) <- w[o] :
'names' attribute [69] must be the same length as the vector [68]
我不确定是什么导致了错误,但似乎我发送给工作人员的所有内容都会导致此错误:
`Error in names(z) <- w[o] :
'names' attribute [69] must be the same length as the vector [68]`
任何人有任何想法如何解决这个问题?