5
我尝试(使用snow::parLapply
)一些代码依赖于一个包并行(即比snow
其他包)。由parLapply
调用该函数引用的对象必须明确地传递给使用clusterExport
集群。有没有办法通过整个包到集群,而不是明确地命名每个函数(包括软件包的用户函数调用!内部函数)在clusterExport
?传递整个包雪集群
我尝试(使用snow::parLapply
)一些代码依赖于一个包并行(即比snow
其他包)。由parLapply
调用该函数引用的对象必须明确地传递给使用clusterExport
集群。有没有办法通过整个包到集群,而不是明确地命名每个函数(包括软件包的用户函数调用!内部函数)在clusterExport
?传递整个包雪集群
所有节点上安装的软件包,并有所有节点上的代码调用library(thePackageYouUse)
通过一个可用的命令,鸡蛋像
clusterApply(cl, library(thePackageYouUse))
我觉得parallel
包附带R最近的版本有例子 - - 例如,从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
})
谢谢德克。有没有什么原因为什么做'clusterExport(ls())'会危险?这不会从包传递函数帮助,但它会节省很多头痛的快速并行for循环(别人的,不是我的!),它依靠一吨的全局变量。 – Michael
这只是糟糕的设计,因为它使用scattershot plus厨房水槽方法。在串行解决方案中设计你需要的东西,然后使其平行。 –
够公平的,谢谢你的帮助。 – Michael