R-如何将表达式传递给集群(在并行包中)

时间:2018-12-27 16:32:15

标签: r parallel-processing

我正在尝试在并行包的顶部创建复制的并行化版本。我遇到的一个问题是,它会先评估我的表达式,然后再将它们交给可复制的复制函数:

par_replicate <- function(cl, n, expr){
    parallel::clusterCall(
        cl = cl,
        function() replicate(n , expr)
    )
}

cl <- parallel::makeCluster(2)
par_replicate(cl, 3, rnorm(1))
stopCluster(cl)

[[1]]
[1] -1.312669 -1.312669 -1.312669

[[2]]
[1] 0.5598533 0.5598533 0.5598533

如您所见,在将表达式提供给复制函数之前,该表达式已在集群中进行求值,因此复制仅返回相同编号的多个副本。我完全不知道如何解决此问题,因此将不胜感激。

1 个答案:

答案 0 :(得分:0)

让任何人对我设法使用match.call()eval()函数解决的答案感兴趣:

par_replicate <- function(cl, n, expr){
    x <- match.call()
    parallel::clusterCall(
        cl = cl,
        function() replicate(n , eval(x$expr))
    )
}

cl <- parallel::makeCluster(2)
par_replicate(cl, 3, {rnorm(1)})
stopCluster(cl)

不确定这是否是最好的解决方案,但它似乎对我有用:)