web-dev-qa-db-ja.com

RStudioでRスクリプトにコマンドラインパラメータを指定することは可能ですか?

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

my_rscript --dataset mydataset

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

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

dataset <- "mydataset"

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

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

13
Dmitry K.

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

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

7
rrs

今のところ私はこのようにしています:新しい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
16
biocyberman

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
5
TARehman

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

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

例:

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
1
knish

これは私のために働きました:私の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"
_
1
upatnite2

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

現在開始している私の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で強調表示して実行することにより、スクリプト内の他のすべてを実行するだけです。

0
Joe Healey