我有一个R脚本,我希望能够提供几个命令行参数(而不是在代码本身硬编码参数值)。该脚本运行在Windows系统上。
我找不到关于如何将命令行上提供的参数读到我的R脚本的信息。如果这不能做到,我会感到惊讶,所以也许我只是没有在我的谷歌搜索中使用最好的关键字…
有什么建议吗?
我有一个R脚本,我希望能够提供几个命令行参数(而不是在代码本身硬编码参数值)。该脚本运行在Windows系统上。
我找不到关于如何将命令行上提供的参数读到我的R脚本的信息。如果这不能做到,我会感到惊讶,所以也许我只是没有在我的谷歌搜索中使用最好的关键字…
有什么建议吗?
当前回答
由于optparse在回答中已经提到过几次,并且它为命令行处理提供了一个全面的工具包,这里有一个简短的简化示例,说明如何使用它,假设输入文件存在:
脚本。接待员:
library(optparse)
option_list <- list(
make_option(c("-n", "--count_lines"), action="store_true", default=FALSE,
help="Count the line numbers [default]"),
make_option(c("-f", "--factor"), type="integer", default=3,
help="Multiply output by this number [default %default]")
)
parser <- OptionParser(usage="%prog [options] file", option_list=option_list)
args <- parse_args(parser, positional_arguments = 1)
opt <- args$options
file <- args$args
if(opt$count_lines) {
print(paste(length(readLines(file)) * opt$factor))
}
给定任意文件blah.txt,有23行。
在命令行中:
Rscript脚本。R -h输出
Usage: script.R [options] file
Options:
-n, --count_lines
Count the line numbers [default]
-f FACTOR, --factor=FACTOR
Multiply output by this number [default 3]
-h, --help
Show this help message and exit
Rscript脚本。R -n blah.txt输出[1]"69"
Rscript脚本。R -n -f 5 blah.txt输出[1]"115"
其他回答
如果你需要指定带有标志的选项(如-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的等效程序时发现了这篇文章。
你需要little(发音为'little r')
Dirk将在大约15分钟后来详细说明;)
以下几点:
命令行参数为 可以通过commanddargs()访问,因此 参见help(commandArgs)获取an 概述。 你可以在包括Windows在内的所有平台上使用Rscript.exe。它将支持commandArgs()。little可以移植到Windows上,但目前只能移植到OS X和Linux上。 CRAN上有两个附加包——getopt和optparse——它们都是为命令行解析而编写的。
编辑于2015年11月:新的替代方案已经出现,我全心全意地推荐docopt。
在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成功执行,等等。
由于optparse在回答中已经提到过几次,并且它为命令行处理提供了一个全面的工具包,这里有一个简短的简化示例,说明如何使用它,假设输入文件存在:
脚本。接待员:
library(optparse)
option_list <- list(
make_option(c("-n", "--count_lines"), action="store_true", default=FALSE,
help="Count the line numbers [default]"),
make_option(c("-f", "--factor"), type="integer", default=3,
help="Multiply output by this number [default %default]")
)
parser <- OptionParser(usage="%prog [options] file", option_list=option_list)
args <- parse_args(parser, positional_arguments = 1)
opt <- args$options
file <- args$args
if(opt$count_lines) {
print(paste(length(readLines(file)) * opt$factor))
}
给定任意文件blah.txt,有23行。
在命令行中:
Rscript脚本。R -h输出
Usage: script.R [options] file
Options:
-n, --count_lines
Count the line numbers [default]
-f FACTOR, --factor=FACTOR
Multiply output by this number [default 3]
-h, --help
Show this help message and exit
Rscript脚本。R -n blah.txt输出[1]"69"
Rscript脚本。R -n -f 5 blah.txt输出[1]"115"