并行生成随机生成

时间:2017-04-09 19:39:17

标签: r parallel-processing

将以下函数转换为并行处理的最佳方法是什么?

myapply <- function(n, FUN, ...) {
  lapply(1:n, function(i) { FUN(...) })
}

我需要使用其他用于随机生成的函数来运行它,例如

myapply(100, function(...) rnorm(100, ...), 1, 1)

所以我需要它来正确处理随机种子。此外,我希望代码可移植且与平台无关,因此parallel::mcapply对我不起作用。我正在考虑将foreachdoParalleldoRNG一起考虑,但doRNG目前无法在CRAN上用于Windows,并且三年内未更新!我考虑了parallel::parLapply,但由于我没有要导出的元素的封闭列表(我找到this implementationhere,但我在正确执行clusterExport时遇到问题,但我希望更简单的事情。)

1 个答案:

答案 0 :(得分:1)

future包的future_lapply()函数(我是作者)使用L'Ecuyer-CMRG RNG流提供并行RNG,这也是parallel::mclapply()使用的。它在所有操作系统中都是一样的,无论是并行后端。

以下适用于所有操作系统,包括Windows:

myapply <- function(n, FUN, ...) {
  future_lapply(1:n, function(i, ...) { 
    FUN(...)
  }, ..., future.seed = TRUE)
}

library("future")
plan(multiprocess)

y <- myapply(100, function(...) rnorm(100, ...), mean = 1, sd = 1)