1

执行以下虚拟代码时:

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

谢谢!

4

1 回答 1

3

您的代码中有两个问题:

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

利用

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

for()基础 R 和基础 R之间的重要区别在于foreach(),您在内部执行的任何操作for()都可以在for(). 然而,foreach()是一个函数,函数内部的任何东西foreach()都是函数环境的局部变量。

从某种意义上说,比toforeach()更相似。lapply()for()

于 2015-07-26T06:43:52.573 回答