【问题标题】:R - export a function (not an object) in all clustersR - 在所有集群中导出一个函数(不是一个对象)
【发布时间】: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


【解决方案1】:

函数也是一个对象。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-07-04
    • 2011-11-30
    • 1970-01-01
    • 2017-06-06
    • 1970-01-01
    • 1970-01-01
    • 2021-03-28
    • 1970-01-01
    相关资源
    最近更新 更多