Как заставить foreach% doparalell% выполнять все итерации? - PullRequest
0 голосов
/ 02 мая 2019

Я устанавливаю цикл 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 элемент.

1 Ответ

0 голосов
/ 02 мая 2019

Обновление Я пропустил "." перед пакетами, поэтому предполагалось, что это был итератор. 6 пакетов 6 результатов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...