执行以下虚拟代码时:
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
循环后等于零?
谢谢!
答案 0 :(得分:3)
您的代码中存在两个问题:
foreach()
的结果分配给对象。foreach
函数不返回值。 (严格地说,该函数返回print()
的值为NULL。)使用
f <- foreach(c = 1:P) %dopar% { c }
基础R和for()
中的foreach()
之间的重要区别在于for()
内的任何内容都可以在for()
的父环境中使用。但是,foreach()
是一个函数,foreach()
函数内的任何内容都是函数环境的本地函数。
从某种意义上说,foreach()
与lapply()
更相似,而不是for()
。