Я устанавливаю цикл foreach с% dopar%.Функция внутри должна быть выполнена n раз.Однако независимо от того, что это за функция, функция выполняется только 6 раз.Там нет ошибок.Как мне заставить foreach выполнять все итерации?
Я попытался изменить число внутри makePSOCKcluster (), и результаты остались прежними.В настоящее время я использую makePSOCKcluster (nworkers) с nworkers = 7 (параллельный :: detectCores () возвращает 8).Первоначально я запускал сложную функцию внутри цикла, но я попытался заменить функцию на что-то простое, например sqrt () , и я получил тот же результат.Я работаю на Mac: R версии 3.5.1 (2018-07-02) Платформа: x86_64-apple-darwin15.6.0 (64-разрядная версия) Работает под: macOS 10.14.2
Использование версий пакета:doParallel_1.0.11 iterators_1.0.10 foreach_1.4.4
suppressPackageStartupMessages( library(foreach) )
suppressPackageStartupMessages( library(doParallel) )
nworkers <- parallel::detectCores() -1
cl <- makePSOCKcluster(nworkers)
registerDoParallel(cl)
epkgs = c("lubridate","dplyr","tidyr","doParallel","foreach", "Rcpp")
efuns = ls(globalenv())
foreach( i= 1:31, packages = epkgs, .export = efuns) %dopar% { sqrt(i)}
В результате я получаю:
[[1]]
[1] 1
[[2]]
[1] 1.414214
[[3]]
[1] 1.732051
[[4]]
[1] 2
[[5]]
[1] 2.236068
[[6]]
[1] 2.44949
Хотя функции должны были вернуть 31 элемент.