我试图并行化(使用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
 })

08-25 05:25