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

R - export a function (not an object) in all clusters

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

提前致谢。

函数也是对象。

因此您可以使用 parallel::clusterExport(cl, "mean_by_column") 导出它。