tfm*_*key 3 parallel-processing r system
我在Windows 7中运行RStudio。我编写了一个主脚本,该主脚本可生成57个新的R脚本,每个脚本均包含基于两个参数运行函数的命令:
vector1 <- c(1:19)
vector2 <- c(1:3)
Run Code Online (Sandbox Code Playgroud)
首先,主脚本使用两个for循环(一个对vector1使用索引'abc' ,一个对vector2使用索引'def' )在我的工作目录中生成采用以下文件名约定的57个脚本中的每一个:
run_inference_<<vector1[abc]>>_<<vector2[def]>>.R
Run Code Online (Sandbox Code Playgroud)
该部分成功运行-57个脚本中的每个脚本都使用正确的命令生成。我的工作目录现在包含文件run_inference_1_1.R,run_inference_1_2.R等。
我要做的最后一件事是同时运行我的主人的所有57个脚本。我在for循环中尝试了以下方法:
system(paste0("Rscript run_inference_",abc, "_", def, ".R"),wait = F)
Run Code Online (Sandbox Code Playgroud)
这是行不通的。但是,如果我打开57个生成的脚本之一并运行它,则可以从该脚本中获得所需的结果。这告诉我问题出在我编写的system()命令中。
57个脚本中的每个脚本都不会占用大量计算资源(尚未),并且我现在要进行的测试应该在PC上花费2分钟。请问如何编辑system()命令以同时执行所有57个脚本?
system
除非您正在运行的程序知道如何并行化脚本本身,否则您不必通过调用大型脚本来执行此操作。您可以通过system
从不同的R进程多次调用来实现。
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)
Run Code Online (Sandbox Code Playgroud)