并行,foreach,未找到导出的对象

问题描述 投票:0回答:1

我有以下(示例)代码,它在计算集群上以被动模式执行:

> foo <- function(...)
> {
> require(copula)
> require(foreach)
> require(methods)
> require(np)
> require(parallel)
> {cl <- makeCluster(detectCores()-1) ; registerDoParallel(cl)}
...
> str(dat)
'data.frame':   31269 obs. of  15 variables
...
> clusterExport(cl=cl,varlist=c("dat",...))
> dumpster <- foreach(i=1:10,.packages=c("copula","foreach","np"),.export=c("dat"))%dopar%
> {... ; dat.new <- some.fn(dat) ; ...}
...
> stopCluster(cl)
> }
> foo(...)
Error in get(name, envir = envir) : object 'dat' not found
Calls: foo ... postNode -> sendData -> sendData.SOCKnode -> serialize -> get
Execution halted

我究竟做错了什么?

r parallel-processing
1个回答
0
投票

你已经混淆了一些指令,以便命令这样做

library(doSNOW)
library(foreach)
cl <- makeCluster(detectCores()-1, type = "SOCK")
registerDoSNOW(cl)

我假设对象dat已经可用,所以这就是你如何使用foreach

dumpster <- foreach(i=1:10,.packages=c("copula","np"), .combine = c)%dopar%{dat.new <- some.fn(dat)}

然后关闭群集

stopCluster(cl)
© www.soinside.com 2019 - 2024. All rights reserved.