我有一个R脚本,我希望能够提供几个命令行参数(而不是在代码本身硬编码参数值)。该脚本运行在Windows系统上。

我找不到关于如何将命令行上提供的参数读到我的R脚本的信息。如果这不能做到,我会感到惊讶,所以也许我只是没有在我的谷歌搜索中使用最好的关键字…

有什么建议吗?


当前回答

你需要little(发音为'little r')

Dirk将在大约15分钟后来详细说明;)

其他回答

如果你需要指定带有标志的选项(如-h,——help,——number=42等),你可以使用R包optparse(灵感来自Python): http://cran.r-project.org/web/packages/optparse/vignettes/optparse.pdf。

至少这是我理解你的问题的方式,因为我在寻找bash getopt,或perl getopt,或python argparse和optparse的等效程序时发现了这篇文章。

以下几点:

命令行参数为 可以通过commanddargs()访问,因此 参见help(commandArgs)获取an 概述。 你可以在包括Windows在内的所有平台上使用Rscript.exe。它将支持commandArgs()。little可以移植到Windows上,但目前只能移植到OS X和Linux上。 CRAN上有两个附加包——getopt和optparse——它们都是为命令行解析而编写的。

编辑于2015年11月:新的替代方案已经出现,我全心全意地推荐docopt。

Try library(getopt)…如果你想让事情变得更好。例如:

spec <- matrix(c(
        'in'     , 'i', 1, "character", "file from fastq-stats -x (required)",
        'gc'     , 'g', 1, "character", "input gc content file (optional)",
        'out'    , 'o', 1, "character", "output filename (optional)",
        'help'   , 'h', 0, "logical",   "this help"
),ncol=5,byrow=T)

opt = getopt(spec);

if (!is.null(opt$help) || is.null(opt$in)) {
    cat(paste(getopt(spec, usage=T),"\n"));
    q();
}

把这个添加到你的脚本顶部:

args<-commandArgs(TRUE)

然后你可以引用传入的参数args[1], args[2]等。

然后运行

Rscript myscript.R arg1 arg2 arg3

如果参数是带空格的字符串,请用双引号括起来。

在bash中,您可以构造如下所示的命令行:

$ z=10
$ echo $z
10
$ Rscript -e "args<-commandArgs(TRUE);x=args[1]:args[2];x;mean(x);sd(x)" 1 $z
 [1]  1  2  3  4  5  6  7  8  9 10
[1] 5.5
[1] 3.027650
$

你可以看到变量$z被bash shell替换为“10”,这个值被commandArgs取走并输入args[2],范围命令x=1:10被R成功执行,等等。