R foreach并行循环值未保存

时间:2015-07-26 06:17:49

标签: r domc doparallel

执行以下虚拟代码时:

P = 2
library(foreach)
library(doMC)
registerDoMC(P)      
f = double(length = P)

print('=== f values in loop ===')
foreach(c = 1:P) %dopar% 
{
    f[c] = c
    print(f[c])
}

print('### f values after loop ###')
for(c in 1:P){ print(f[c])  }

我收到以下输出:

"=== f values in loop ==="
1
2
"### f values after loop ###"
0
0

为什么f循环中分配的foreach值未保存?

特别是,为什么f[1]f[2]foreach循环后等于零?

谢谢!

1 个答案:

答案 0 :(得分:3)

您的代码中存在两个问题:

  1. 您尚未将foreach()的结果分配给对象。
  2. foreach函数不返回值。 (严格地说,该函数返回print()的值为NULL。)
  3. 使用

    f <- foreach(c = 1:P) %dopar% { c }
    

    基础R和for()中的foreach()之间的重要区别在于for()内的任何内容都可以在for()的父环境中使用。但是,foreach()是一个函数,foreach()函数内的任何内容都是函数环境的本地函数。

    从某种意义上说,foreach()lapply()更相似,而不是for()