使用R脚本从命令行绘制简单图形非常方便。然而,从bash脚本运行R并不方便。理想情况可能是这样的:
#!/path/to/R
...
或者#!/usr/bin/env R
...
但我没有能够让它们中的任何一个工作。
另一种选择是完全使用R编写脚本,例如 script.R
,然后使用 R --file=script.R
或类似命令调用它。 但是,有时候脚本会依赖于晦涩难懂的命令行开关,这时代码的一部分存在于脚本之外。例如:通过本地 .Rprofile 从 bash 将东西偷偷传入 R,所需的开关就是除了 --no-init-file
以外 --vanilla
所包含的所有内容。
另一种选择是编写一个 bash 脚本来存储 R 标志并轻松执行,然后调用 R 脚本。问题在于这意味着单个程序被拆分成两个文件,现在必须将它们保持同步,并一起转移到新机器等等。
我目前最不喜欢的选项是将 R 嵌入到 bash 脚本中:
#!/bin/bash
... # usage message to catch bad input without invoking R
... # any bash pre-processing of input
... # etc
R --random-flags <<RSCRIPT
# R code goes here
RSCRIPT
所有的东西都在一个单独的文件中。它是可执行的,并且很容易处理参数。问题是将bash和R组合在一起几乎消除了任何IDE不失败于其中之一的可能性,并且使我的心真的很痛。
我是否有所遗漏?
Rscript --help
将列出许多有用的选项,可以添加到 shebang 中,例如--vanilla
。 - flodelcommandArgs
函数、getopt
和optparse
包可用于解析命令行参数。这样在从命令行运行脚本时,参数和选项也可以被传递到脚本中。 - flodel#!/usr/bin/Rscript
(这不是 R 脚本的标准做法)。 - gented