我想在并行向量执行与副作用的功能。例如,在下面的代码段中,add.entry
具有修改master
的副作用。
library(parallel)
master <- data.frame()
add.entry <- function(x) {
row <- data.frame(a = x, b = sin(x))
master <- rbind(master, row)
}
mclapply(1:42, add.entry)
我得到的输出是
[[1]] A B 1 1 0.841471
[[2]] A B 1 2 0.9092974
[[3]] A B 1 3 0.14112
[[4] A B 1 4 -0.7568025
然而,master
包含任何算账。我最好的猜测是,有一些涉及竞争状态。我怎样才能解决这个问题,如可能宣布一个重要的部分?
rbind()
在您的全球环境的master
,但它在不同的叉子一些副本(参见https://privefl.github.io/blog/a-guide-to-parallelism-in-r/)。mclapply
已返回的东西(如lapply
)。你可以简单地做
library(parallel)
add.entry <- function(x) {
data.frame(a = x, b = sin(x))
}
res_list <- mclapply(1:42, add.entry)
master <- do.call("rbind", res_list)