我有一些代码可以遍历列表并替换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))。