我试图并行化(使用snow::parLapply
)一些依赖于程序包(即,除snow
以外的程序包)的代码。在parLapply
调用的函数中引用的对象必须使用clusterExport
显式传递给群集。有什么方法可以将整个程序包传递到群集,而不必在clusterExport
中显式命名每个函数(包括用户功能调用的程序包的内部函数!)?
最佳答案
将软件包安装在所有节点上,并通过一个可用命令在所有节点上调用代码library(thePackageYouUse)
,例如
clusterApply(cl, library(thePackageYouUse))
我认为最新R发行版随附的
parallel
软件包中有示例-从help(clusterApply)
参见示例,其中boot
软件包随处可见: ## A bootstrapping example, which can be done in many ways:
clusterEvalQ(cl, {
## set up each worker. Could also use clusterExport()
library(boot)
cd4.rg <- function(data, mle) MASS::mvrnorm(nrow(data), mle$m, mle$v)
cd4.mle <- list(m = colMeans(cd4), v = var(cd4))
NULL
})