R - Как передать выражение в кластер (в параллельном пакете) - PullRequest
0 голосов
/ 27 декабря 2018

Я пытаюсь создать параллельную версию репликации поверх параллельного пакета.Проблема, с которой я сталкиваюсь, заключается в том, что она продолжает оценивать мои выражения перед передачей их в функцию репликации, воспроизводимый код:

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

Как вы можете видеть, выражение оценивается в кластере до его передачифункция replicate, таким образом, replicate просто возвращает несколько копий одного номера.Я в полном недоумении, как решить эту проблему, поэтому любая помощь будет оценена.

1 Ответ

0 голосов
/ 28 декабря 2018

Если кто-то заинтересовался ответом, мне удалось исправить это с помощью функций 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)

Не уверен, что это лучшее решение, но оно мне подходит:)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...