グローバル環境で定義されていない別の関数の中にparLapply
を使用しようとしています。ワーカー関数は他の関数のリストを使用しています。これはあらかじめグローバル環境で定義されていないclusterExport
になります。私の問題は、両方の関数が評価環境をクラスターにエクスポートすることです。クラスターは膨大なものであり、必要ではありません。クラスタ化する方法評価環境なしで関数をエクスポートする
作業者関数workerFunction
と関数リストfunctionList
を呼び出してみましょう。
workerFunction <- function(i) {
intermediateOutput <- functionList[[i]](y)
result <- otherCalculations(intermediateOutput)
return(result)
}
library(parallel)
cl <- makeCluster(detectCores())
environment(workerFunction) <- .GlobalEnv
environment(functionList) <- .GlobalEnv
clusterExport(cl, varlist=c("functionList", "y"), envir=.GlobalEnv)
output <- parLapply(cl, inputVector, workerFunction)
私が取得:
Error in get(name, envir = envir) (from <text>#53) : object 'functionList' not found
私はその後、functionList
の巨大囲む環境がクラスタにエクスポートされ、environment(functionList) <- .GlobalEnv
を設定ドント場合。なぜ地球環境でfunctionList
が見つからないのですか?
ありがとう、clusterExportが本当に問題でした – Ronert