我正在尝试parLapply
在全局环境中未定义的另一个函数内部使用。worker 函数使用了我想要预先使用的其他函数的列表,这些函数也没有在全局环境中定义。clusterExport
我的问题是这两个函数都将它们的评估环境导出到集群,这些集群很大而且不需要。
让我们调用worker函数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
如果我不设置environment(functionList) <- .GlobalEnv
,那么巨大的封闭环境将functionList
被导出到集群。为什么 RfunctionList
在全局环境中找不到?