【问题标题】:Running multiple R scripts using the system() command使用 system() 命令运行多个 R 脚本
【发布时间】:2018-03-04 09:02:27
【问题描述】:

我在 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.Rrun_inference_1_2.R 等。

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

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

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

57 个脚本中的每一个都不会(还)计算密集型,我现在想做的测试应该在我的 PC 上花费 2 分钟。请问如何编辑我的 system() 命令以同时执行所有 57 个脚本?

【问题讨论】:

  • sapply(paste0("Rscript run_inference_",abc, "_", def, ".R"), system, wait = F) 没有评论生成和运行 57 脚本是否适合您的问题。
  • 我确实回应了 Vlo 不言而喻的担忧,即可能有更好的方法来做到这一点。为什么要编写脚本,而不是执行诸如获取所需输入的函数并使用所需的 57 种不同输入运行该函数之类的事情?
  • 我有一台资源充足的 PC,应该能够处理非常密集的工作,并且更熟悉并行计算的同事告诉我,考虑到可用的情况,这项任务应该是可行的。我们会看到的!

标签: r parallel-processing system


【解决方案1】:

除非您正在运行的程序知道如何并行化脚本本身,否则您不会通过使用大脚本调用一次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)

【讨论】:

  • 谢谢。我将对此进行试验,看看效果如何。经营这样的大工作对我来说是新的,所以这是一次伟大的“火的洗礼”。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-09-20
  • 2018-10-05
  • 2021-05-17
  • 1970-01-01
相关资源
最近更新 更多