Rでスクリプトに渡されたコマンドライン引数を読み取るために使用できることは知っていますが、Rでスクリプトを実行し、カスタムコマンドライン引数を使用して実行することcommandArgs
により、コマンドラインスクリプトをデバッグしたいと思います。source
スクリプトファイルを変更せずにコマンドライン引数を変更する方法はありますか?
私のスクリプトは通常optparse
、実際の引数の解析にパッケージを使用しています。
Rでスクリプトに渡されたコマンドライン引数を読み取るために使用できることは知っていますが、Rでスクリプトを実行し、カスタムコマンドライン引数を使用して実行することcommandArgs
により、コマンドラインスクリプトをデバッグしたいと思います。source
スクリプトファイルを変更せずにコマンドライン引数を変更する方法はありますか?
私のスクリプトは通常optparse
、実際の引数の解析にパッケージを使用しています。
私がコメントで言ったことを拡張しようとします。
Python でスクリプトを作成する方法には、通常、ファイルがスクリプトとして実行されているかどうかの検出、引数の処理、およびファイルで定義された関数の呼び出しが含まれます。何かのようなもの:
def foo(x):
return x*2
if __name__=="__main__":
v = sys.argv[1]
print foo(v)
これには、ファイルをインタラクティブな Python セッションにインポートでき、「if」ブロック内のコードが実行されないという利点があります。foo
その後、関数を対話的にテストできます。
ファイルがスクリプトとして実行されているか、対話型セッションから取得されているかを R で確認する方法はありますか?
foo=function(x){
return(x*2)
}
if(!interactive()){
x = as.numeric(commandArgs(trailingOnly=TRUE)[1])
print(foo(x))
}
if run withRscript argtest.R 22
は 44 を出力しますが、R を対話的に実行しsource("argtest.R")
て実行すると、if ブロック内のコードは実行されません。その素敵なパターン。
たとえば、独自の定義で単純に上書きするのはどうですか
commandArgs <- function(trailingOnly=FALSE) {
args<- c("/foo/bar", "baz")
# copied from base:::commandArgs
if (trailingOnly) {
m <- match("--args", args, 0L)
if (m)
args[-seq_len(m)]
else character()
}
else args
}