R中的并行化:如何在每个节点上“源”?

时间:2014-02-05 17:00:51

标签: r parallel-processing

我使用以下方法创建了并行工作者(所有工作在同一台机器上运行):

MyCluster = makeCluster(8)

如何让这8个节点中的每个节点都来源我写的R文件? 我试过了:

clusterCall(MyCluster, source, "myFile.R")
clusterCall(MyCluster, 'source("myFile.R")')

和几个相似的版本。但都没有效果。 能帮我找错吗?

非常感谢!

2 个答案:

答案 0 :(得分:5)

以下代码符合您的目的:

library(parallel)

cl <- makeCluster(4)
clusterCall(cl, function() { source("test.R") })

## do some parallel work

stopCluster(cl)

您也可以使用clusterEvalQ()执行相同的操作:

library(parallel)

cl <- makeCluster(4)
clusterEvalQ(cl, source("test.R"))

## do some parallel work

stopCluster(cl)

然而,这两种方法之间存在细微差别。 clusterCall()在每个节点上运行一个函数,而clusterEvalQ()计算每个节点上的表达式。如果您有一个可变来源文件列表,clusterCall()会更容易使用,因为clusterEvalQ(cl,expr)会将expr视为一个表达式,因此在那里放一个变量并不方便。

答案 1 :(得分:2)

如果使用命令来源本地文件,请确保该文件存在。

否则将文件放在网络共享或NFS上,并获取绝对路径。

更好,标准答案,编写程序包并在每个节点上安装该程序包,然后只需致电library()require()