我在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个脚本?
答案 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)