我有一個問題得到一些代碼與R中的並行包一起使用。我使用R 2.15。R並行S4類集羣錯誤
這裏有一個簡單的例子...我有一個文件 'animal.R',這包含以下內容:
# animal.R
setClass("Animal", representation(species = "character", legs = "numeric"))
##Define some Animal methods
setGeneric("count",function(x) standardGeneric("count"))
setMethod("count", "Animal", function(x) { [email protected]})
setGeneric("countAfterChopping",function(x) standardGeneric("countAfterChopping"))
setMethod("countAfterChopping", "Animal", function(x) { [email protected] <- [email protected]; [email protected]})
然後,在我的R端子,我跑:
library(parallel)
source('animal.R')
開始兩個節點的本地集羣:
cl <- makeCluster(rep('localhost', 2))
講述動物類的羣集節點:
clusterEvalQ(cl, parse('animal.R'))
然後在集羣上運行一些代碼:
# This works
parSapply(cl, list(daisy, fred), count)
# This doesn't...
parSapply(cl, list(daisy, fred), countAfterChopping)
停止集羣:
stopCluster(cl)
工程按預期parSapply第一個呼叫,但第二個產生這個錯誤:
Error in checkForRemoteErrors(val) :
2 nodes produced errors; first error: "Animal" is not a defined class
任何想法發生了什麼?爲什麼第二次調用parSapply不起作用?
當你'parse' animal.R,你會得到一個未計算的表達,所以你既可以使用'clusterEvalQ(CL,EVAL(解析('animal.R ')))'或者只是來源腳本。這是否有訣竅? – BenBarnes
啊,是的......這似乎在伎倆。非常感謝! – Ash