【问题标题】:R: How can I export methods provided by a package to a PSOCK cluster?R:如何将包提供的方法导出到 PSOCK 集群?
【发布时间】:2015-11-17 15:44:53
【问题描述】:

R 中,我有一个矩阵列表,并且想对列表中的矩阵应用一个汇总函数。这些矩阵代表社交网络,因此我需要应用ergm 包提供的一些专门的汇总函数。这些汇总统计信息包含在汇总方法中。我可以编写一个函数作为此汇总方法的包装器,并使用lapply 将该函数应用于矩阵列表。

但是,当我尝试通过使用 parallel 包中的 parLapplyparSapply 来并行化此操作时,结果看起来很奇怪。当我导出summary.statistics 函数时,我什至会收到一条错误消息。

我是否必须将 ergm 包提供的汇总方法导出到集群对象?如果是这样,怎么做?以下代码是一个独立的示例。

library("ergm")
library("parallel")

# create list of matrices
m <- matrix(rbinom(900, 1, 0.1), nrow = 30)
l <- list(m, m, m, m, m)

# write wrapper function that computes results
fun <- function(mat) {
  s <- summary(mat ~ edges + dsp(1))
  return(s)
}

cl <- makePSOCKcluster(2)  # create cluster object

test1 <- sapply(l, fun)  # works!
test2 <- parSapply(cl, l, fun)  # problem: results look weird!

clusterExport(cl, varlist = "summary.statistics")
test3 <- parSapply(cl, l, fun)  # problem: says method is not applicable!

【问题讨论】:

    标签: r parallel-processing


    【解决方案1】:

    您应该使用以下方式将包加载到工作程序中,而不是导出包中定义的函数:

    clusterEvalQ(cl, library("ergm"))
    

    您应该始终加载工作函数所需的所有包,因为它们不会因为包已被主控器加载而自动加载。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-08-09
      • 1970-01-01
      • 1970-01-01
      • 2016-02-15
      • 1970-01-01
      相关资源
      最近更新 更多