如何让 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 个结果。
我正在使用 %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 个结果。