R:如何将包提供的方法导出到 PSOCK 集群?

标签 r parallel-processing

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

但是,当我尝试使用 parLapply 来并行化它时或 parSapply来自 parallel包,结果看起来很奇怪。当我导出 summary.statistics 时功能,我什至收到一条错误消息。

ergm包提供的summary方法一定要导出到cluster对象吗?如果是这样,如何?以下代码是一个独立的示例。

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!

最佳答案

您应该使用以下内容在工作程序中加载包,而不是导出包中定义的函数:

clusterEvalQ(cl, library("ergm"))

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

关于R:如何将包提供的方法导出到 PSOCK 集群?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33761123/

相关文章:

Java 并行流未按预期工作

parallel-processing - Java8中Iterator和Spliterator的区别

C - 原子 killpg

python - 无法确定 R 库路径

r - 如何在r中使用马尔可夫链仅绘制高于某个最小阈值的边缘

r - 保留尾随零

r - 在 Windows 10 中使用 Linux bash 将 Linux R 解释器引入 Rstudio(Windows 应用程序)。

r - 如何设置一个列表,显示每组目标变量的百分比

c - 为什么我的程序在嵌套时会生成随机结果?

c# - 有效地使用数千个超时任务