對於非常基本的用法,看看?commandArgs
。
對於更復雜的用法,用於命令行參數和選項解析的兩個流行包爲getopt和optparse。我一直使用它們,他們完成了工作。我也看到argparse,argparser和GetoptLong,但從未使用過。我錯過了一個:德克建議你看看docopt這看起來非常好,易於使用。
最後,由於您似乎在通過管道傳遞參數,因此您可能會發現這個OpenRead
()函數有助於推廣代碼並允許您的參數成爲管道或文件。
我想測試docopt
所以把他們放在一起,你的腳本可能會是這樣的:
#!/usr/bin/env Rscript
## Command-line parsing ##
'usage: my_prog.R [-v -m <msg>] <param> <file_arg>
options:
-v verbose
-m <msg> Message' -> doc
library(docopt)
opts <- docopt(doc)
if (opts$v) print(str(opts))
if (!is.null(opts$message)) cat("MESSAGE: ", opts$m)
## File Read ##
OpenRead <- function(arg) {
if (arg %in% c("-", "/dev/stdin")) {
file("stdin", open = "r")
} else if (grepl("^/dev/fd/", arg)) {
fifo(arg, open = "r")
} else {
file(arg, open = "r")
}
}
dat.con <- OpenRead(opts$file_arg)
dat <- read.table(dat.con, sep = " ", header = FALSE)
# do something with dat and opts$param
而且你可以試運行:
echo "1 2 3" | ./test.R -v -m HI param_1 -
或
./test.R -v -m HI param_1 some_file.txt
你真的*想看看我s更聰明[dococt](http://cran.r-project.org/package=doctopt)軟件包---但是,你仍然需要一個程序來讀取它們,而'r'敲擊'Rscript'在我的書中... – 2014-10-02 02:02:03
固定鏈接:[docopt](http://cran.r-project.org/web/packages/docopt/index.html)。確實很有趣,主要來自易用性。但一眼看去,我覺得它沒有那麼多的花裏胡哨。 – flodel 2014-10-02 02:12:20
感謝您接收錯字。經過多年的getopt(以及相關的C/C++庫)後,我開始使用docu。 – 2014-10-02 02:13:51