6

Rコマンドラインからスクリプトを実行できるように、コマンドライン引数を解析するために使用している以下の関数があります。

 parseArguments <- function() {
     text1 <- commandArgs(TRUE)
     eval(parse(text=gsub("\\s", ";", gsub("--","", text1))))
     args <- list()
     for( ar in ls()[! ls() %in% c("text1", "args")] ) {args[ar] <- get(ar)}
     return (args)
 }

R次のコマンド ライン引数を使用して、上記の関数を使用して CL 引数を解析するスクリプトを呼び出そうとしたときの CLI セッション出力を次に示します。

./myscript.R --param1='XLIF' --param2='ESX' --param3=5650.0 --param4=5499.2 --param5=0.0027397260274 --param6='Jul' --riskfreerate=0.817284313119 --datafile='/path/to/some/datafile.csv' --imagedir='/path/to/images' --param7=2012 --param8=2
Error in parse(text = gsub("\\s", ";", gsub("--", "", text1))) : 
  8:10: unexpected '/'
7: riskfreerate=0.817284313119
8: datafile=/
            ^
Calls: parseArguments -> eval -> parse
Execution halted

ヘルプ?

[[アップデート]]

Dirk のアドバイスに従い、optparseライブラリをインストールしました。私のコードは次のようになります。

library(optparse)

# Get the parameters
option_list <- list(
  make_option(c("-m", "--param1"), action="store_false"),
  make_option(c("-t", "--param2"), action="store_false"),
  make_option(c("-a", "--param3"), action="store_false"),
  make_option(c("-s", "--param4"), action="store_false"),
  make_option(c("-x", "--param5"), action="store_false"),
  make_option(c("-o", "--param6"), action="store_false"),
  make_option(c("-y", "--param7"), action="store_false"),  
  make_option(c("-r", "--riskfreerate"), action="store_false"),
  make_option(c("-c", "--param8"), action="store_false"),
  make_option(c("-d", "--datafile"), action="store_false"),
  make_option(c("-i", "--imagedir"), action="store_false")  
)

# get command line options, i
opt <- parse_args(OptionParser(option_list=option_list))

同じコマンド ライン パラメーターを渡して R スクリプトを実行すると、次のようになります。

Loading required package: methods
Loading required package: getopt
Error in getopt(spec = spec, opt = args) : 
  long flag "param1" accepts no arguments
Calls: parse_args -> getopt
Execution halted

???

4

2 に答える 2

7

はい、このためだけにCRANパッケージgetoptoptparseがあります。

于 2012-07-25T12:04:05.473 に答える
4

私はあなたが遭遇するエラーについて、あなたの2番目の質問に答えていますoptparse

ヘルプページからmake_option(...):

action:「store」、「store_true」、または「store_false」のいずれかのオプションが検出されたときにoptparseが実行する必要のあるアクションを説明する文字列。デフォルトは「store」です。これは、コマンド文字列でオプションが見つかった場合、optparseが指定された次の値を格納する必要があることを意味します。「store_true」はオプションが見つかった場合はTRUEを格納し、「store_false」はオプションが見つかった場合はFALSEを格納します。

action = "store"つまり、次のようなものを実行する場合は、(デフォルト)を使用する必要があります。

./myscript.R --param1='XLIF' --param2='ESX' [...]
于 2012-07-25T13:21:37.533 に答える