R foreach并行循环值未保存

R foreach parallel loop value not saved

执行以下虚拟代码时:

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

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

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

谢谢!

您的代码有两个问题:

  1. 您尚未将 foreach() 的结果分配给对象。
  2. foreach 函数没有 return 值。 (严格来说,函数 return 是 print() 的值为 NULL。)

使用

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

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

在某种意义上,foreach()for() 更类似于 lapply()