为什么在与library()一起使用时,clusterEvalQ()会返回附加包的列表?

时间:2015-12-11 22:30:53

标签: r parallel-processing

我是Windows中的parallel软件包的新手(以前在类似Unix的环境中完成了我的大多数并行操作,其中进程刚刚分叉)。我正在尝试设置一个集群,在几个不同的数据库中执行一组简单的并行查询。

此时我似乎运行正常。但是,当使用clusterEvalQ将RODBC加载到每个环境中时,我将返回该环境中加载的所有包的列表。我似乎没有得到clusterEvalQ中其他命令的任何类似行为,所以我想知道这是否是一个故意的功能,因为我专门加载了一个包。

为什么clusterEvalQ仅在运行表达式library(RODBC)时返回输出?

最小工作示例/输出如下所示。

> library(parallel)
> parallel.cluster <- makeCluster(spec = 5)
> clusterEvalQ(cl = parallel.cluster,expr = library(RODBC))
[[1]]
[1] "RODBC"     "methods"   "stats"     "graphics"  "grDevices" "utils"     "datasets"  "base"     

[[2]]
[1] "RODBC"     "methods"   "stats"     "graphics"  "grDevices" "utils"     "datasets"  "base"     

[[3]]
[1] "RODBC"     "methods"   "stats"     "graphics"  "grDevices" "utils"     "datasets"  "base"     

[[4]]
[1] "RODBC"     "methods"   "stats"     "graphics"  "grDevices" "utils"     "datasets"  "base"     

[[5]]
[1] "RODBC"     "methods"   "stats"     "graphics"  "grDevices" "utils"     "datasets"  "base"

1 个答案:

答案 0 :(得分:2)

clusterEvalQ始终返回评估每个集群工作者上的表达式的结果。表达式library(RODBC)返回所有附加包的字符向量,但它不可见。当通过clusterEvalQ执行时,它不是不可见的,所以它更明显。