R foreach循环 - 包加载失败

时间:2015-07-08 23:56:58

标签: r foreach parallel-processing

我无法在foreach%dopar%循环中将任何包加载到并行进程。

我使用foreach和doSNOW包成功创建了4个SOCK集群,然后尝试运行一个简单的并行进程。它使用%dopar%而不使用任何包,但加载任意包会引发错误。

下面的示例代码,后面是显示正在使用的软件包的会话信息。

我之前使用过这种类型的代码没有问题。我公司最近的一些网络更改意味着我必须更改一些设置(默认库路径等),可能与该更改有关。不知道从哪里开始排除问题所在 - 任何帮助都非常感谢!

#load foreach and doSNOW packages, setup 4 clusters#

> require(foreach)

> require(doSNOW)

> registerDoSNOW(makeCluster(4, type = "SOCK"))

> getDoParWorkers()
[1] 4

> getDoParName()
[1] "doSNOW"

# %dopar% loop without loading any packages -- works OK #

> foreach(i=1:2) %dopar%

{
    i+1
}

[[1]]
[1] 2

[[2]]
[1] 3

# %dopar% loop with loading a package -- does not work #

> foreach(i=1:2,.packages="forecast") %dopar%

  {

      i+1

  }

Error in e$fun(obj, substitute(ex), parent.frame(), e$data) : 
  worker initialization failed: package or namespace load failed for        'forecast'

会话信息: R版本3.2.1(2015-06-18) 平台:x86_64-w64-mingw32 / x64(64位) 运行于:Windows 7 x64(内部版本7601)Service Pack 1

区域设置: [1] LC_COLLATE = English_United States.1252 LC_CTYPE = English_United States.1252 LC_MONETARY = English_United States.1252 LC_NUMERIC = C
[5] LC_TIME = English_United States.1252

附加基础包: [1] stats graphics grDevices utils数据集方法库

其他附件包:  [1] WriteXLS_3.6.1 rlist_0.4 timeSeries_3012.99 reshape2_1.4.1 plyr_1.8.3 lubridate_1.3.3 lmtest_0.9-34 lattice_0.20-31 knitr_1.10.5
[10] hts_4.5 Matrix_1.2-1 SparseM_1.6 ggplot2_1.0.1 data.table_1.9.4 car_2.0-25 forecast_6.1 timeDate_3012.100 zoo_1.7-12
[19] doSNOW_1.0.12 snow_0.3-13 iterators_1.0.7 foreach_1.4.2

通过命名空间加载(而不是附加):  [1] Rcpp_0.11.6 compiler_3.2.1 nloptr_1.0.4 tseries_0.10-34 tools_3.2.1 lme4_1.1-8 digest_0.6.8 memoise_0.2.1 gtable_0.1.2 nlme_3.1-120
[11] mgcv_1.8-6 parallel_3.2.1 proto_0.3-10 stringr_1.0.0 grid_3.2.1 nnet_7.3-9 minqa_1.2.4 magrittr_1.5 scales_0.2.5 codetools_0.2-11 [21] MASS_7.3-40 splines_3.2.1 pbkrtest_0.4-2 colorspace_1.2-6 fracdiff_1.4-2 quantreg_5.11 quadprog_1.5-5 stringi_0.5-5 munsell_0.4.2 chron_2.3-47

其他可能有用的信息 - .libPaths()位置和makeCluster函数的详细信息。

> .libPaths()
 [1] "C:/Users/G082580/Documents/My Documents/R/R-3.2.1" "C:/R-3.2.1/library"                               

> makeCluster(4,type="SOCK",manual=TRUE)

在localhost上手动启动worker      C:/R-32~1.1/bin/Rscript.exe“C:/ Users / G082580 / Documents / My Documents / R / R-3.2.1 / snow / RSOCKnode.R”MASTER = localhost PORT = 11535 OUT = / dev / null SNOWLIB = C:/ Users / G082580 / Documents / My Documents / R / R-3.2.1

1 个答案:

答案 0 :(得分:2)

如果您需要使用.libPaths功能来加载主程序包,您还需要在工作程序上调用它。此示例使用clusterCall函数将worker初始化为与master相同:

library(doSNOW)
cl <- makeSOCKcluster(4)
registerDoSNOW(cl)
clusterCall(cl, function(x) .libPaths(x), .libPaths())