R で並列パッケージを使用するコードを取得する際に問題が発生しています。R 2.15 を使用しています。
簡単な例を次に示します...次の内容を含む「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) { x@legs})
setGeneric("countAfterChopping",function(x) standardGeneric("countAfterChopping"))
setMethod("countAfterChopping", "Animal", function(x) { x@legs <- x@legs-1; x@legs})
次に、R ターミナルで次のコマンドを実行します。
library(parallel)
source('animal.R')
2 つのノードのローカル クラスターを開始します。
cl <- makeCluster(rep('localhost', 2))
Animal クラスについてクラスタ ノードに伝えます。
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 への最初の呼び出しは期待どおりに機能しますが、2 番目の呼び出しでは次のエラーが発生します。
Error in checkForRemoteErrors(val) :
2 nodes produced errors; first error: "Animal" is not a defined class
何が起こっているのですか?parSapply の 2 回目の呼び出しが機能しないのはなぜですか?