【问题标题】:Incorporating bash scripts into an R package?将 bash 脚本合并到 R 包中?
【发布时间】:2011-02-23 17:46:22
【问题描述】:

背景

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

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

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

问题

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

  2. 是否还有其他我尚未发现的 R 包可以对此有所帮助?

注意事项

按照 Al3xa 的回答,我意识到重要的是要注意使用例如速度损失。 1000-2000 个文件上的 tar 和 gsub 的 R 与 bash 版本可能会少于工作流中当前的速率限制步骤:JAGS(~10-20 分钟)和 FORTRAN(>4 小时)的计算

【问题讨论】:

    标签: bash r workflow


    【解决方案1】:

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

    只有几个理由不将所有想到的东西都移到 R 中。我主要指的是使用Rscript来完成这个

    1) 速度,根据我的测试,在我遇到的任何情况下都会产生中等影响,相对于您提到的时间而言,这将是微不足道的。

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

    我书中的优点是:

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

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

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

    Re: 有用的软件包——据我所知,这并不存在,但我喜欢基于 R 的 make 版本。make 的语法是目前最不灵活的一种(制表符 vs空格?真的吗?) - 我很想写一个基于 R 的替代方案。总有一天,我会...

    【讨论】:

      【解决方案2】:

      嗯,有targsub 等功能。无论如何,我猜你愿意创建一个跨平台的解决方案。为了速度,您应该更喜欢 bash,并且仅将 R 用于特定于 R 的功能。我发现将所有基于系统的命令包装在system 和/或file.* 中没有用处...它会慢得多...如果您使用的是Linux,我建议littler 而不是@987654326 @接口。

      【讨论】:

      • 我不确定在 1000-2000 个文件上使用 R vs bash 版本的 targsub 会造成什么速度损失(尽管我可以测试这个),但是当前的速率限制工作流程中的步骤是 JAGS(约 10-20 分钟)和 FORTRAN(>4 小时)的计算。
      猜你喜欢
      • 2019-09-16
      • 2014-11-06
      • 2013-05-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-20
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多