【发布时间】:2011-06-22 09:44:36
【问题描述】:
我正在尝试使用 doSMP 包通过“foreach”循环加速我的代码。
这是我的问题的简化版本:我正在运行一个名为 main.R 的文件
文件:main.R:
require(doSMP)
dropbox_path = "/home/ruser/Dropbox"
workers <- startWorkers(4)
registerDoSMP(workers)
foreach(jj=1:4 ) %dopar% source("test.R")
stopWorkers(workers)
文件:test.R:
message(dropbox_path)
这将返回以下错误: “源错误(“test.R”): 任务 1 失败 - “找不到对象 'dropbox_path'”
如果我将 main.R 修改为:
require(doSMP)
dropbox_path = "/home/ruser/Dropbox"
workers <- startWorkers(4)
registerDoSMP(workers)
foreach(jj=1:4 ) %dopar% message(dropbox_path)
stopWorkers(workers)
然后它工作得很好。 它还可以很好地处理顺序代码('for' 而不是 'foreach')。
所以 R 子实例可以访问 dropbox_path 变量,但不能在通过源函数解析时访问。我尝试使用 source() 函数参数“local”和“chdir”,但没有成功。
您知道代码的工作方式吗?我想继续使用 source() 函数。
【问题讨论】:
标签: r foreach parallel-processing