Windows 的并行 mapply();像 mcmapply()

Parallel mapply() for Windows; like mcmapply()

我想知道是否有 mapply() 的版本可以与 Windows 并行工作。 parallel 包有很好的并行化 apply 函数的选项,但它似乎遗漏了 mapply() 的 Windows 选项。 parallel 包为非 Windows 用户(即 mcapply()mclapply()mcmapply() 等)和 parApply 为 Windows 用户提供的功能(即 parApply()parLapply() 等)。但是没有parLapply()

Windows是否有等价于mcmapply()的东西?

这里有两个列表:

list1 <- list(elem1 = 1:3, elem2 = 4:6, elem3 = 7:9)
list2 <- list(elem1 = 10:12, elem2 = 13:15, elem3 = 15:17)

我想把它们加在一起;

(result <- mapply(FUN = function(x, y){
  x + y
}, list1, list2, SIMPLIFY = FALSE))

如何为 Windows 用户并行重新创建此内容?

注意:parApply 函数不是像 mcapply 函数那样的直接替换。有关如何使用它们的良好文档,请参阅 link。 https://dept.stat.lsa.umich.edu/~jerrick/courses/stat701/notes/parallel.html

(免责声明:我是作者)

future.apply package provides one-to-one parallel versions of all of R's apply functions. Since it operates on top of the future 框架,它基本上适用于 R 中所有已知的并行后端。

library(future.apply)
plan(multicore)  ## forked processing

list1 <- list(elem1 = 1:3, elem2 = 4:6, elem3 = 7:9)
list2 <- list(elem1 = 10:12, elem2 = 13:15, elem3 = 15:17)

(result <- future_mapply(FUN = function(x, y){
  x + y
}, list1, list2, SIMPLIFY = FALSE))

上面使用了fork处理,和parallel::mcmapply()一样。要使用 MS Windows 也支持的 PSOCK 集群工作程序,请设置 end-user:

plan(multisession)

有了上面的内容,您就不必像这样进行条件编码了:

if (parallel == "forks") {
  ...
} else if (parallel == "this") {
  ...
} else if (parallel == "that") {
  ...
} else {
  ...
}

您只需要一个 future_mapply() 电话。