を使用してコマンドライン引数を処理する別の方法を次に示しR CMD BATCH
ます。私のアプローチは、ここで以前の答えに基づいていますでのでは、コマンドラインで引数を指定し、Rスクリプトでそれらの一部またはすべてにデフォルト値を指定できます。
これが私がtest.Rという名前のRファイルです:
defaults <- list(a=1, b=c(1,1,1)) ## default values of any arguments we might pass
## parse each command arg, loading it into global environment
for (arg in commandArgs(TRUE))
eval(parse(text=arg))
## if any variable named in defaults doesn't exist, then create it
## with value from defaults
for (nm in names(defaults))
assign(nm, mget(nm, ifnotfound=list(defaults[[nm]]))[[1]])
print(a)
print(b)
コマンドラインで、
R CMD BATCH --no-save --no-restore '--args a=2 b=c(2,5,6)' test.R
次に、R内にa
= 2
とb
=がありc(2,5,6)
ます。しかし、たとえば、省略してb
、別の引数を追加することもできますc
。
R CMD BATCH --no-save --no-restore '--args a=2 c="hello"' test.R
そして、Rで、我々は持っているだろうa
= 2
、b
= c(1,1,1)
(デフォルト)、およびc
= "hello"
。
最後に、環境に注意している限り、便宜上、Rコードを関数にラップできます。
## defaults should be either NULL or a named list
parseCommandArgs <- function(defaults=NULL, envir=globalenv()) {
for (arg in commandArgs(TRUE))
eval(parse(text=arg), envir=envir)
for (nm in names(defaults))
assign(nm, mget(nm, ifnotfound=list(defaults[[nm]]), envir=envir)[[1]], pos=envir)
}
## example usage:
parseCommandArgs(list(a=1, b=c(1,1,1)))
R CMD BATCH
遺跡でもある印象を受けます。ただし.Rout
、スクリプト出力だけでなく、.R
その出力を生成したスクリプトファイルから入力コマンド/コメントをインターリーブするファイルも生成するのが好きです。