16

RStudioを使用して、コマンドラインパラメータを持つRスクリプトを編集したい。

my_rscript --dataset mydataset

次に、たとえばライブラリdatasetを使用して、オプション値をR変数に読み込みます。optparse

ただし、RStudioでコマンドラインを提供できる場所が見つからなかったため、「保存時のソース」機能を使用できました。代わりに、プログラム自体にすべてのプログラムパラメータをハードコーディングする必要があります。

dataset <- "mydataset"

これには、異なるデータを指定する必要があるたびにスクリプトテキストを変更する必要があります。

コマンドライン情報を提供する方法を知っている人はいますか?

4

7 に答える 7

17

今のところ、私は次のようにしています。新しいRscriptを編集するための新しいウィンドウを開きます。保持したい場合は、保存して次のような名前を付けることができます。test_myscript.R これは次の内容ですtest_myscript.R

debug(getopt) # suppose I want to debug 'getopt' function in 'myscript.R'
system("myscript.R -a -b -c")
# Debug process start after this. 
# Check ?browser for help about navigating inside browser
于 2014-08-05T21:19:56.360 に答える
8

私はこの質問が古く、以下のリンクが古くなっていることを知っていますが、それは質問に答えます。いいえ、RStudioからコマンドライン引数にアクセスすることはできません(または2012年1月29日現在ではできませんでした)。

リンク https://support.rstudio.com/hc/communities/public/questions/200659066-Accessing-command-line-options-in-RStudio?locale=en-us

于 2013-12-02T21:06:52.270 に答える
6

を使用してプログラムを呼び出すことができますRscript programname.r arg1 arg2 arg3。引数はに渡されるcommandArgsため、次のようになります。

Rscript programname.r F N 32

> args <- commandArgs(trailingOnly=TRUE)
> args[1]
[1] F
> args[2]
[1] N
> args[3]
[1] 32
于 2013-02-26T15:13:37.667 に答える
2

これは私のために働きました:私のRscriptは次の通りです:

args <- commandArgs()
print(paste0("args:", args))
print(paste0("args[1]:",args[1]))
print(paste0("args[2]:",args[2]))
print(paste0("args[3]:",args[3]))
print(paste0("# of args:",length(args)))

'

Rscriptで使用するコマンドライン入力をエミュレートするために、RStudioに次のように入力しました。

commandArgs <- function() c("AMZN", 10, 200)

これにより、望ましい結果が得られました。

[1] "args:AMZN" "args:10"   "args:200" 
[1] "args[1]:AMZN"
[1] "args[2]:10"
[1] "args[3]:200"
[1] "# of args:3"
于 2016-10-12T16:53:56.240 に答える
2

たとえばargparserの使用に興味があり、Rstudioを使用してインタラクティブに開発/分析を続ける場合は、次の回避策を使用できます。

  1. コマンドラインパーサーを書き込み、解析されたすべての入力を含むmy_rscriptオブジェクトを作成します。args
  2. argsオブジェクトをファイルに保存する行を追加します。
  3. my_rscriptコマンドラインから実行し、目的の引数を指定します。
  4. argsRstudioのファイルからオブジェクトをロードし、インタラクティブに続行します

例:

library("argparser")
parser <- arg_parser(description='Process commandline arguments')
parser <- add_argument(parser, arg="--dataset", type="character", help = "Dataset argument")
args = parse_args(parser)
args_file = "tempArgObjectFile.rds"
saveRDS(args, args_file); print(args); quit(); #comment this after creating args_file
args = readRDS(args_file)  #use this to load during interactive development
于 2018-02-20T08:41:33.843 に答える
0

これは本当に古いですが、同じことをしようとしたときに偶然見つけたので、次のことを試してみました。人々が試してみたい場合は、素晴らしくて迅速です(おそらく、簡単なコマンドがいくつかある場合にのみ役立ちます)ただし、引数):

現在開始している私のRscriptを考えると:

args <- commandArgs(TRUE)
df <- read.csv(args[1], sep=",", check.names=FALSE, row.names = 1)
.
. # Do some analysis and plotting etc.
.

Rscriptが受け取るコマンドラインをエミュレートしたい場合は、argsベクトルを「手動で」作成できます。

args <- c("/path/to/my/inputfile.csv")

その後args[1]、常に持つのと同じ値を取ります。RStudioで強調表示して実行することにより、スクリプト内の他のすべてを実行するだけです。

于 2016-08-31T11:35:32.993 に答える
0

この動作はまだRstudioに組み込まれていませんが、探しているワークフローを実現するのに役立つ何かを実現する方法がいくつかあります。

1.インタラクティブプロンプト

readlineand関数を使用する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))
于 2021-04-27T16:09:44.430 に答える