これ
に回答したときに,コマンドライン引数の扱いについて調べた.
- スペースを含む引数は
"--arg=hoge fuga"
のように全体をクオートで囲う--args='hoge fuga
とするとスペースで切られる
optparse
を使うとPython
っぽく書ける- 自作関数を作らなくていいし,変な入力もチェックできる
- コマンドライン引数をとってくる部分は
commandArgs()
なので,スペースを含む引数の指定の仕方は同じ
- 他にもいくつかパッケージがあるようだ
optparse
を使わない
質問した人はこんな感じにコマンドライン引数を扱っていた.
args_test.r
args <- commandArgs(trailingOnly=T) parseArgs <- function(x) strsplit(sub("^--", "", x), "=") print(parseArgs(args))
実行
> r --slave --file=args_test.r --args --title=TITLE "--author=AUTHOR NAME" # [[1]] # [1] "title" "TITLE" # [[2]] # [1] "author" "AUTHOR NAME"
これでもエラーにならない
> r --slave --file=args_test.r --args --title=TITLE --author='AUTHOR NAME' # [[1]] # [1] "title" "TITLE" # # [[2]] # [1] "author" "'AUTHOR" # # [[3]] # [1] "NAME'"
optparse
を使う
args_test2.r
suppressPackageStartupMessages(library("optparse")) parser <- OptionParser() parser <- add_option(parser, c("--title"), action="store", default="TITLE", help="Title") parser <- add_option(parser, c("--author"), action="store", default="AUTHOR NAME", help="Author") print(parse_args(parser))
実行
--help
が付く
> r --slave --file=args_test2.r --args --title=TITLE "--author=AUTHOR NAME" # package 'optparse' was built under R version 3.3.3 # $help # [1] FALSE # # $title # [1] "TITLE" # # $author # [1] "AUTHOR NAME"
これはエラー
> r --slave --file=args_test2.r --args --title=TITLE --author='AUTHOR NAME' # Error in getopt(spec = spec, opt = args) : # "NAME'" is not a valid option, or does not support an argument # Calls: print -> parse_args -> getopt # Execution halted