shell命令的R语言并行计算

shell命令的R语言并行计算,r,parallel-processing,R,Parallel Processing,我有一个用例,我试图在一堆文件上运行callmyrscript。我已经写下了下面的片段- for(i in 1:length(fileNames)){ generateTolerancesCommand = paste(c("Rscript ",modelScriptName, " --inp=",paste(c("'",dimensionsFolder, "/", fileNames[i],"'"), colla

我有一个用例,我试图在一堆文件上运行callmyrscript。我已经写下了下面的片段-

for(i in 1:length(fileNames)){

  generateTolerancesCommand = paste(c("Rscript ",modelScriptName,
                                      " --inp=",paste(c("'",dimensionsFolder, "/", fileNames[i],"'"), collapse = ""),
                                      " --sea=",seasonal,
                                      " --freq=",freq,
                                      " --outp=",paste(c("'",outputFolder,"/","'"), collapse=""),
                                      " --tp=",tp,
                                      " --sd=",sd,
                                      " --end=",end,
                                      " --op=",op,
                                      " --tls=",tls,
                                      " --pts=",pts,
                                      " --userf=",paste(c("'",dimensionsFeedbackFolder, "/", fileNames[i],"'"), collapse = "")
                                     ),collapse="")
  system(generateTolerancesCommand)
}
这很好,但通常需要3-4分钟才能完成一个循环,最终需要2小时才能完成脚本。我想我可以做得更好,使它平行。在每次迭代中,我都会生成一个独立的R执行运行片段,它可以在独立的数据集上工作。
我试着阅读并行库,比如R中的parallel、doParallel,但我无法找出适用于我的用例的最佳方法。在这方面有经验的人能给我一个建议吗?

如果您不想在环境中创建变量,而只是编写一些输出文件,您可以用
foreach
替换您的循环

library(foreach)
cl <- parallel::makeCluster(parallel::detectCores() - 1) 
doParallel::registerDoParallel(cl)
foreach(i = seq_along(fileNames), .combine = 'c') %dopar% {

  ## PUT YOUR CODE HERE

  NULL
}
parallel::stopCluster(cl)
库(foreach)

你的脚本返回了什么?写信给环球环境?您想从它们中得到什么?是的,它们在定义的文件夹中生成输出,并作为命令行参数传递。仅供参考,不要手动添加shell引号,请使用
shQuote(str)
;它是特定于操作系统的,负责某些字符的转义等。我已经按照您的建议运行了我的代码。让我来评估一下性能。有没有办法检查有多少并行shell命令并行运行。实际上,我在foreach中的代码调用system()。@PrakharGupta打开系统监视器。对于使用的每个核心,您将看到一个名为
R
的进程。谢谢。成功了。你能推荐我一些好的设计模式在R博客中的实现吗?@PrakharGupta不确定你所说的“好的设计模式实现”是什么意思。我是一名java程序员,对R脚本相当陌生。我想知道,是否有一个好的代码编写设计方法,我可以遵循。