2017-09-22 62 views
2

我正在RStudio在Windows 7我写了一个主脚本生成57个新的R脚本,每个运行基于两个参数的函数命令:使用该系统运行多个存在的R脚本()命令

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

首先,主脚本使用两个for循环(使用索引“ABC”的向量1,一个一个使用索引“高清”为vector2)产生在我的工作目录每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个脚本中的每一个脚本都不是计算密集型的,但我现在要做的测试需要2分钟。如何编辑我的system()命令同时执行所有57个脚本?

+0

'sapply(paste0( “RSCRIPT run_inference _”,美国广播公司, “_”,闪避, “.R”),系统等待= F)'没有评论时是否生成并运行57脚本是一个很好的想法或不是你的问题。 – Vlo

+1

我的确反映了Vlo的不言自明的担忧,即可能有更好的方法来做到这一点。为什么你想写出脚本,而不是像做一个功能那样需要输入所需的功能,而只是用你想要的57个不同的输入来运行那个功能? – Dason

+0

我拥有资源充足的个人电脑,应该能够处理非常密集的工作,而熟悉并行计算的同事告诉我,考虑到可用的情况,这个任务应该是可行的。我们将看到! – tfmunkey

回答

3

除非您正在运行的程序知道如何平行化脚本本身,否则您不需要使用大脚本调用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) 
+0

谢谢。我会试验一下,看看它是如何发展的。 像这样的大型工作对我来说是新的,所以这是一场伟大的'火灾的洗礼',就像它一样。 – tfmunkey

相关问题