将bash脚本合并到R包中?

时间:2011-02-23 17:46:22

标签: bash r workflow

背景

我正在编写R包以支持可重复的研究。此时,工作流主要由bash脚本组合在一起,我可以通过发送像./runscript.sh这样的单个命令来运行分析。我使用bash进行以下操作:

  1. 文件操作tarrsync,'重命名'
  2. 在本地并通过ssh
  3. 运行bash文件
  4. 使用R --vanilla运行R脚本,然后调用R函数
  5. 使用sed
  6. 查找并替换文件中的文字
  7. 通过qsub
  8. 提交工作

    在我看来,从R函数或R脚本执行整个工作流程会更有效(更清晰,更简单)。我偏爱R,因为我对它更熟悉,并且主要在emacs ESS中工作。

    问题

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

    2. 还有其他我尚未找到的R套餐会对此有帮助吗?

    3. 备注

      根据Al3xa的回答,我意识到重要的是要注意使用例如速度惩罚。 R vs bash版本的tar和gsub在1000-2000文件上可能会比工作流程中的当前速率限制步骤少:JAGS(~10-20min)和FORTRAN(> 4hrs)的计算

2 个答案:

答案 0 :(得分:1)

嗯,有targsub等函数。无论如何,我想你愿意创建一个跨平台解决方案。为了速度,您应该更喜欢使用bash,并且仅将R用于特定于R的函数。我发现在system和/或file.*中包装所有基于系统的命令并不有用...它会慢得多......如果你使用Linux,我建议{{ 1}}超过littler界面。

答案 1 :(得分:1)

我非常喜欢将R用作“集成”环境与bash脚本。我正在将所有bash和ruby脚本移动到Rscript,因为我需要对它们进行更改。

只有几个原因不会让人想到将所有东西都转移到R中。我主要是指使用Rscript来完成这个

1)速度,从我的测试来看,在我遇到的任何情况下都会产生适度的影响,而且相对于你提到的时间而言,这将是微不足道的。

2)可移植性,因为Rscript的路径等可能因系统而异。我在OS X上写东西并将它们移到Linux服务器上没有问题,但在Windows上可能会中断。

我书中的优点是:

1)我写起来容易得多。我不必在条件语句和循环之类的细微特性之间来回切换。

2)更宽容。我无法描述我花了多少时间来尝试让bash脚本工作,因为我不小心有一个我不应该拥有的空间。 R在这方面要好得多(是的,当然,我们都应该完全遵循R中的惯例,但是如果我不这样做,我宁愿它不会让我停顿几个小时。)

3)我做得更好。对于tar一个文件并不重要,但我发现我在R与awk/sed中做了更好的文本操作。

Re:有用的软件包 - 根据我的知识,这不存在,但是我喜欢基于R的make版本.make的语法是那里最不灵活的语法之一(标签与空格?真的吗?) - 我很乐意写一个基于R的替代方案。有一天,我会...