2016-08-01 72 views
0

我已經其在被動模式上計算集羣執行以下的(樣品)代碼:平行,forech,導出對象未找到

> 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 

我在做什麼錯誤?非常感謝你!

回答

0

你混淆了一些指令,使爲了做到這一點

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

我假設的對象dat已經availaible所以這是你如何使用foreach

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

然後關閉羣集

stopCluster(cl) 
+0

感謝您的回答。但事實上並沒有混合起來。我選擇了「平行」包,因爲它符合我的需求。其他軟件包是我的計算所需要的,並且我發佈了它們以防在我不知情的情況下存在一些不兼容問題。最後,原因是'dat'太大而無法在集羣內頻繁複制,導致內存問題,從而導致集羣崩潰。 – DeeCeeDelux

+0

我自己也有同樣的問題,我希望所有人都能爲你效勞。 –

+0

是的,最後......只是一個痛苦的屁股找出基於「對象'dat'沒有找到」的錯誤 - 在我眼裏 - 在這種錯誤的情況下沒有意義。 – DeeCeeDelux