将bash脚本整合到R包中?

7

背景

我正在编写一个支持可重复性研究的R包。目前,工作流程主要由bash脚本支持,我可以通过发送单个命令如./runscript.sh来运行分析。我使用bash进行以下操作:

  1. 文件操作tarrsync,'rename'
  2. 本地和通过ssh运行bash文件
  3. 使用R --vanilla运行调用R函数的R脚本
  4. 使用sed在文件中查找和替换文本
  5. 通过qsub提交作业

我认为,使用R函数或R脚本从头到尾执行整个工作流程会更加高效(更清晰、更容易)。我更喜欢R,因为我更熟悉它,并且主要在emacs ESS中工作。

问题

  1. 是否值得使用systemfiles函数将所有这些bash使用封装在R中?

  2. 是否有其他我尚未发现但对此很有帮助的R包?

注释

根据Al3xa的答案,我意识到需要注意的重要一点是,在1000-2000个文件上使用R版本的tar和gsub与bash版本相比的速度惩罚可能会小于工作流程中当前的限制步骤:JAGS的计算(约10-20分钟)和FORTRAN(>4小时)。

2个回答

1

嗯,有像targsub等函数。无论如何,我猜你想创建一个跨平台的解决方案。出于速度考虑,你应该优先选择bash,并仅在需要R特定功能时使用R。我不认为将所有基于系统的命令包装在system和/或file.*中很有用...这会慢得多...如果你正在使用Linux,我建议使用littler而不是Rscript接口。


我不确定在处理1000-2000个文件时,使用R和bash版本的targsub会带来什么速度惩罚(虽然我可以测试),但目前工作流程中限制速率的因素是JAGS计算(约10-20分钟)和FORTRAN计算(> 4小时)。 - David LeBauer

1

我是一个使用R作为“集成”环境而不是bash脚本的忠实粉丝。我正在将所有的bash和ruby脚本转移到Rscript,因为我需要对它们进行更改。

只有几个原因不将所有内容移动到R中,主要是指使用Rscript来完成此操作:

1)速度,从我的测试结果来看,在我遇到的任何情况下,影响都是适度的,并且相对于您提到的时间来说微不足道。

2)可移植性,即Rscript等路径在不同系统上可能不同。我在OS X上编写东西并将其移动到Linux服务器上没有遇到任何问题,但在Windows上可能会出现问题。

我认为使用R的优点是:

1)更容易编写。我不必在条件语句和for循环等方面来回切换,因为这些方面存在轻微的特殊性。

2)更容错。我无法描述我花费多少时间尝试让bash脚本工作,因为我不小心在不该有空格的地方放了一个空格。在这方面,R更加友好(是的,当然,我们应该完美地遵循R中的约定,但如果我没有这样做,我宁愿不要被卡住几个小时)。

3) 我的工作做得更好。对于tar文件来说没有关系,但是我发现在文本操作方面,例如与awk/sed相比,我在R中做得更好。

关于有用的软件包 - 据我所知,这并不存在,但我很想要一个基于R的版本make。 make的语法是最不灵活的之一(制表符还是空格?真的吗?)- 我很想编写一个基于R的替代品。总有一天,我会的......


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接