R:将source()的输出保存在foreach循环中

时间:2019-08-18 21:04:25

标签: loops foreach parallel-processing

我有一些代码可以遍历列表并替换R代码,然后执行该代码(感谢jdobres):

for (i in goal_shared$V1) {

f <- tempfile() # create a temp file
template <- readLines('test_code.R') # read your template file
writeLines(template, f) # write the template code into a temp connection
gsub_file(f, "ABC", i, fixed=TRUE) # rewrite the temp file
source(f) # run the temp file

}

我想并行运行它(即在单独的内核中执行i的每个替换)。

为此,我尝试了foreach:

foreach(i = goal_shared$V1, .packages="xfun") %dopar% {
    tryCatch({
        goal_shared<- read.delim("E:/goal_shared.txt", header=FALSE)
        f <- tempfile()
        template <- readLines("test_code.R")
        writeLines(template, f)
        gsub_file(f, "ABC", i, fixed=TRUE)
        source(f) 
    }, error = function(e) NULL)
}

但是,foreach的输出是一个列表。我想以某种方式在全局环境中保存临时文件(f)的每次运行的环境。更具体地说,每次我在foreach代码中运行source(f)时,都会有一个结果环境,我希望从主环境中i的所有运行中加载(而不是列表,而是每个源的实际结果) (f))。

0 个答案:

没有答案