我使用以下方法创建并行工作者(所有工作在同一台机器上):
MyCluster = makeCluster(8)
如何让这8个节点中的每个节点都来源我写的R文件?我试过了:
clusterCall(MyCluster, source, "myFile.R")
clusterCall(MyCluster, 'source("myFile.R")')
和几个相似的版本。但都没有效果。你能帮我找错吗?
非常感谢你!
以下代码符合您的目的:
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
视为一个表达式,所以在那里放一个变量是不方便的。
如果使用命令来源本地文件,请确保该文件存在。
否则将文件放在网络共享或NFS上,并获取绝对路径。
更好的是,标准答案,写一个包,并在每个节点上安装该包,然后只需调用library()
或require()
。