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

コードに 2 つの問題があります。

  1. foreach()の結果をオブジェクトに割り当てていません。
  2. 関数はforeach値を返しません。(厳密に言えば、この関数print()は NULL の値を返します。)

使用する

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

for()ベース R との重要な違いは、foreach()内部で行うことはすべてfor()の親環境で利用できることですfor()。ただし、foreach()関数であり、関数内のすべてforeach()は関数環境に対してローカルです。

ある意味では、はよりforeach()も に似ています。lapply()for()

于 2015-07-26T06:43:52.573 に答える