R foreach%dopar%:导出到主R过程

时间:2013-09-13 09:52:25

标签: r foreach

%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

谢谢!

3 个答案:

答案 0 :(得分:4)

您应该阅读foreach文档:

  

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

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

答案 1 :(得分:1)

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

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

答案 2 :(得分:0)

感谢Karl,我现在明白了'.combine'

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