如何让 foreach %doparalell% 执行所有迭代?

How to make foreach %doparalell% execute all iterations?

我正在使用 %dopar% 设置一个 foreach 循环。里面的函数要执行n次。然而无论函数是什么,函数都只执行了 6 次。没有错误。如何让 foreach 执行所有迭代?

我尝试更改 makePSOCKcluster() 内部的数字,结果是一样的。目前我是 运行 makePSOCKcluster(nworkers)nworkers = 7 ( parallel::detectCores() returns 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 个元素。

更新我少了一个“.”在包前面,所以它假设它是一个迭代器。 6 个包 6 个结果。