この動作はまだRstudioに組み込まれていませんが、探しているワークフローを実現するのに役立つ何かを実現する方法がいくつかあります。
1.インタラクティブプロンプト
readline
and関数を使用するmenu
と、ターミナルにプロンプトを追加し、それに応じて入力を受け入れることで、スクリプトをインタラクティブにすることができます。したがって、Rstudioでスクリプトを実行するたびにスクリプトを変更したくない場合は、次のように、毎回引数を入力する一連のコマンドを設定できます。
x <- readline("What is your quest? ")
y <- menu(title = "What is your favorite color?", choices = c("Blue", "Clear"))
print(paste("Your quest is", x))
if (y == 1) print("Aaaaaargh!")
2.インタラクティブモードの検出
関連する問題は、Rstudioでの作業中にスクリプトの引数を変更できるようにしたいが、コマンドラインでのスクリプトの使用を妨げないようにすることです。これは、スクリプトの引数をハードコーディングする際の問題です。置き換えたりオーバーライドcommandArgs
したりすると、すべての引数を1つの場所にまとめて、完成したコードを使用するときにコメントアウトできるようになりますが、それでも問題は解決しません。代わりに、インタラクティブモードであるかどうかを検出し、それに応じて引数を処理することを検討してください。
if (interactive()) {
opts <- c('grail')
} else {
opts <- commandArgs(trailingOnly = TRUE)
}
print(paste("I seek the", opts[1]))
3.optparseのデフォルトを使用する
optparseを使用している場合は、さらに簡単になります。default
各呼び出しで引数をに設定するだけmake_option
で、プログラムをインタラクティブに実行するときに使用されます。これは、上記のワークフローのいずれかと組み合わせることもできます。
library(optparse)
opt_list <- list(make_option(
c("--quest"),
dest = 'your_quest',
type = 'character',
default = "the grail"
))
opt_parser <- OptionParser(option_list = opt_list)
opt <- parse_args(opt_parser)
print(paste("You seek", opt$your_quest))