R - 在所有集群中导出一个函数(不是对象)。

问题描述 投票:0回答:1

我用的是 pblapply() 来并行运行代码。它给出了一个进度条,这很有用。我使用像 clusterExport()clusterEvalQ() 来导出对象或librairies到集群中。但我没能在我的环境中分享一个自制的功能。你能帮我解决这个问题吗?

这是一个非常基本的例子。

# 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参数中重写整个函数时,它可以工作,但我不想使用它,因为真正的自制函数非常长,而且我想多次应用这样的代码,我不想每次都重写整个函数。而且,如果我以后想修改自制函数,或者想做一些调试的话,也不是最优的。

先谢谢你了。

r parallel-processing cluster-computing lapply
1个回答
0
投票

一个函数也是一个对象。

因此,你可以使用以下方法导出它 parallel::clusterExport(cl, "mean_by_column").

© www.soinside.com 2019 - 2024. All rights reserved.