您描述命令行選項的方式與大多數人希望使用它的方式不同。通常,命令行選項將採用單個參數,而沒有前面選項的參數將作爲參數傳遞。如果一個參數需要多個項目(如文件列表),我會建議使用strsplit()解析字符串。
下面是一個使用optparse一個例子:
library (optparse)
option_list <- list (make_option (c("-f","--filelist"),default="blah.txt",
help="comma separated list of files (default %default)")
)
parser <-OptionParser(option_list=option_list)
arguments <- parse_args (parser, positional_arguments=TRUE)
opt <- arguments$options
args <- arguments$args
myfilelist <- strsplit(opt$filelist, ",")
print (myfilelist)
print (args)
下面是幾個例子運行:
$ Rscript blah.r -h
Usage: blah.r [options]
Options:
-f FILELIST, --filelist=FILELIST
comma separated list of files (default blah.txt)
-h, --help
Show this help message and exit
$ Rscript blah.r -f hello.txt
[[1]]
[1] "hello.txt"
character(0)
$ Rscript blah.r -f hello.txt world.txt
[[1]]
[1] "hello.txt"
[1] "world.txt"
$ Rscript blah.r -f hello.txt,world.txt another_argument and_another
[[1]]
[1] "hello.txt" "world.txt"
[1] "another_argument" "and_another"
$ Rscript blah.r an_argument -f hello.txt,world.txt,blah another_argument and_another
[[1]]
[1] "hello.txt" "world.txt" "blah"
[1] "an_argument" "another_argument" "and_another"
注意,對於strsplit,你可以使用正則表達式來確定的分隔符。我會建議類似以下內容的東西,這會讓您使用逗號或冒號來分隔您的列表:
myfilelist <- strsplit (opt$filelist,"[,:]")
您可以詳細說明爲什麼@ agstudy的解決方案不起作用?這是相當準確 –
此外,可能重複http://stackoverflow.com/questions/2151212/how-can-i-read-command-line-parameters-from-an-r-script –
@RicardoSaporta它不重複。它有點不同。 – agstudy