R foreach %dopar% : 将结果导出到主 R 进程



>%dopar% 将主 R 进程分叉为几个独立的子进程。有没有办法使这些子进程与主R进程通信,以便可以"恢复"数据?

require(foreach) 
require(doMC) 
registerDoMC() 
options(cores = 2 )
a <- c(0,0)
foreach(i = 1:2 ) %do% {
    a[i] <- i
}
print(a) # returns 1 2
a <- c(0,0)
foreach(i = 1:2 ) %dopar% {
    a[i] <- i
}
print(a) # returns 0 0

谢谢!

您应该阅读foreach文档:

foreach 和 %do%/%dopar% 运算符提供了一个循环构造 这可以被视为循环和Lapply标准的混合体 功能。它看起来类似于 for 循环,它计算一个 表达式,而不是函数(如 lapply),但它的目的是 返回一个值(默认情况下为列表),而不是导致 副作用。

Try this:
a <- foreach(i = 1:2 ) %dopar% {
  i
}
print(unlist(a))

如果希望结果是数据帧,可以执行以下操作:

 library(data.table)
 result <- foreach(i = 1:2) %dopar% {
      i
 }
 result.df <- rbindlist(Map(as.data.frame, result))

感谢 Karl,我现在明白了".combine"的目的

a <- foreach(i = 1:2 , .combine=c) %dopar% {
    return(i)
}
print(a) # returns 1 2

最新更新