【问题标题】:Specify package location in foreach在 foreach 中指定包位置
【发布时间】:2015-11-03 16:04:02
【问题描述】:

我正在将包安装到特定目录,然后使用以下方法加载到库中:

library(CustomPackage, lib.loc = "R_Libs")

然后,当使用 foreach 时,我无法弄清楚如何从自定义位置“R_Libs”加载这个包。

foreach(i=(1:100), .packages=c("lubridate","CustomPackage")) %dopar% {
some code here...
}

任何想法如何强制从“R_Libs”目录中读取一个包?

【问题讨论】:

  • 添加目录到?.libPaths也许

标签: r parallel-foreach


【解决方案1】:

在 R 控制台中修改库路径是没有意义的。

> library(doParallel)
> library(foreach)
> cl = makeCluster(detectCores() - 1)
> registerDoParallel(cl)
> getDoParWorkers()
[1] 3
> .libPaths()
[1] "D:/Program Files/R/R-3.2.3/library"
> .libPaths(c(.libPaths(), "C:/"))
> .libPaths()
[1] "D:/Program Files/R/R-3.2.3/library" "C:/"   

在foreach里面,库路径还是默认的:

> tmp = foreach(j = 1:2) %dopar% {.libPaths()}
> tmp
[[1]]
[1] "D:/Program Files/R/R-3.2.3/library"

[[2]]
[1] "D:/Program Files/R/R-3.2.3/library"

虽然我不确定 foreach 究竟是如何工作的,但我的想法是启动几个新的 Rscript。在每个新的 Rscript 中,库路径将是 Rprofile.site 中指定的默认路径。

所以最方便的方法是在D:\Program Files\R\R-3.2.3\etc\下的Rprofile.site中添加路径

另一种方法是手动加载库,即

tmp = foreach(j = 1:2) %dopar% {
          library(xxx, lib.loc = /xxx/xx)
          ...
      }

这更加灵活,尤其是在无法访问 Rprofile.site 时。

【讨论】:

    【解决方案2】:

    您好,这里有另一个解决方案:

    foreach(i=(1:100), .packages=c("lubridate")) %dopar%{ .libPaths("R_Libs") library("CustomPackage")  some code here... }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-04-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多