在foreach中指定包位置

时间:2015-11-03 16:04:02

标签: r parallel-foreach

我正在将软件包安装到特定目录,然后使用:

加载到库中
library(CustomPackage, lib.loc = "R_Libs")

然后在使用foreach时,我无法确定如何从该自定义位置加载此一个包" R_Libs"。

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

任何想法如何强制从" R_Libs" ?目录

2 个答案:

答案 0 :(得分: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究竟是如何工作的,但我的想法是启动几个新的Rscripts。在每个新的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时。

答案 1 :(得分:0)

您好,这里还有另一种解决方法:

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