WindowsのRでクラスターを使用するとき、クラスターからマスターに結果を転送する簡単な方法を見つけようとしていました。結果が配列または単純な数値の場合、foreach /%dopar%ステートメントの.combineオプションがこれを処理しますが、結果が複雑なオブジェクトの場合、そのようなrandomForestモデルを許可し、モデル全体をスレーブクラスターから転送する方法マスターに戻りますか?
私は試してみました:で評価しenv=.Global
ますが、私のWindows7では機能しません。
最後に、オブジェクトをファイルに保存することで回避します。その後、マスターはオブジェクトを回復できます。誰かがもっとエレガントな方法を知っているか、なぜ評価がうまくいかないのかを知っているなら、私はコメントに感謝します。
サンプルコード:
print(" paralelize with 8 cores ------------------------------")
library(doSNOW)
cl<-makeCluster(8)
registerDoSNOW(cl)
clusterEvalQ(cl, library(randomForest))
clusterExport(cl, "x")
clusterExport(cl, "y")
clusterExport(cl, "x.selected")
makeModel <- function(i){
m <- randomForest(x,x.selected[i,],mtry=250,sampsize=3200,ntree = 3000,do.trace=TRUE)
eval(parse(text = paste("model_",i," <- m",sep="")))
eval(parse( text =paste("save(model_", i, ", file =\"model_", i, ".Rdata\")",sep="" ) ))
}
foreach(i = 1:length(x.selected[,1]),.verbose = TRUE ) %dopar% makeModel(i)
stopCluster(cl)
foreach(i = 1:length(x.selected[,1]),.verbose = TRUE ) %do%
load(paste("model_",i,".RData",sep=""))