R foreach значение параллельного цикла не сохранено

При выполнении следующего фиктивного кода:

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 ответ

Решение

У вас есть две проблемы в вашем коде:

  1. Вы не присвоили результат foreach() к объекту.
  2. foreach функция не возвращает значение. (Строго говоря, функция возвращает значение print() который равен NULL.)

использование

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

Важное различие между for() в базе R и foreach() это то, что вы делаете внутри for() доступен в родительской среде for(), Тем не мение, foreach() это функция и что-нибудь внутри foreach() Функция является локальной для функциональной среды.

В некотором смысле foreach() больше похоже на lapply() чем for(),

Другие вопросы по тегам