使用system()命令运行多个R脚本

时间:2017-09-22 17:50:49

标签: r parallel-processing system

我在Windows 7中运行RStudio。我编写了一个主脚本,生成57个新的R脚本,每个脚本都有基于两个参数运行函数的命令:

vector1 <- c(1:19)
vector2 <- c(1:3)

首先,主脚本使用两个for循环(一个使用 vector1 的索引'abc',一个使用 vector2 的索引'def')来生成我的工作目录中的57个脚本中的每个脚本采用以下文件名约定:

run_inference_<<vector1[abc]>>_<<vector2[def]>>.R

该部分成功运行 - 57个脚本中的每个脚本都是使用正确的命令生成的。我的工作目录现在包含 run_inference_1_1.R run_inference_1_2.R 等文件。

我想要做的最后一件事就是从我的主人那里同时运行所有57个脚本。我在for循环中尝试了以下内容:

system(paste0("Rscript run_inference_",abc, "_", def, ".R"),wait = F)

这不起作用。但是,如果我打开57个生成的脚本中的一个并运行它,那么我从该脚本中获得所需的结果。这告诉我问题是在我编写的system()命令中。

57个脚本中的每个脚本都不会是计算密集型的,而我现在要做的测试应该在我的电脑上花费2分钟。如何编辑我的system()命令同时执行所有57个脚本?

1 个答案:

答案 0 :(得分:4)

除非您正在运行的程序知道如何并行化脚本本身,否则不要使用大脚本调用system一次。您可以通过从不同的R进程多次调用system来完成此操作。

scripts <- paste0("Rscript run_inference_", abc, "_", def, ".R")

# make lots of R processes, assuming the script to be called won't eat CPU
cl <- parallel::makeCluster(30)

parallel::parLapply(cl, scripts, function(script) system(script))
parallel::stopCluster(cl)