【发布时间】:2020-08-20 09:23:07
【问题描述】:
我使用 pblapply() 来并行运行代码。它提供了一个进度条,这很有用。我使用 clusterExport() 或 clusterEvalQ() 之类的函数将对象或库导出到集群中。但是我没有设法共享我的环境中可用的自制功能。你能帮我解决这个问题吗?
这是一个非常基本的例子:
# home-made function
mean_by_column <- function(j){
mean(iris[,j])
}
# this will produce error: could not find function "mean_by_column"
cl <- parallel::makeCluster(2)
result_list <- pbapply::pblapply(
cl = cl,
X = 1:4,
FUN = function(j){ mean_by_column(j) }
)
# this will work
result_list <- pbapply::pblapply(
cl = cl,
X = 1:4,
FUN = function(j){ mean(iris[,j]) }
)
当我在pblapply FUN参数中重写整个函数时它可以工作,但是我不想使用它,因为真正的自制函数很长,我想多次应用这样的代码,我不想每次都重写整个函数。而且,以后想修改自制功能,或者想进行一些调试,也不是最优的。
提前致谢。
【问题讨论】:
-
一个函数就是一个对象。
-
你是对的,它与
clusterExport(cl = cl, varlist = c("mean_by_column"), envir = environment())一起工作,我之前测试过没有成功,不知道为什么。
标签: r parallel-processing cluster-computing lapply