2013-02-20 16 views
8

私はoptparseライブラリを使用して、例えば、R-スクリプト持つコマンドラインパラメータを編集するRStudioを使用して、例えば、RStudioのRスクリプトにコマンドラインパラメータを指定することはできますか?

my_rscript --dataset mydataset 

、その後、R変数にoptiion値を読み出すために、言う、datasetたい。

しかし、私はRStudioでどこの行を提供することができないので、 "保存時にソース"機能を使うことができました。代わりに、私は、プログラム自体にすべてのプログラムパラメータをハードコーディングする必要があります。

dataset <- "mydataset" 

スクリプトテキスト私は別のデータを指定する必要があるたびに修正する必要とします。

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

+0

をそれ。これがあなたが意味するものでない場合は、あなたの質問を編集する必要があります。 – TARehman

答えて

5

私はこの質問が古く、下のリンクが古いですけど、それは質問に答えます。いいえ、RStudioのコマンドライン引数にアクセスすることはできません(2012年1月29日現在ではありません)。

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

+6

これは技術的には正しいかもしれませんが、RStudioコンソールから実行できる 'system(" rscript myscript.r -a -b -c ")'で引数を渡すことは明らかに可能です(そしていつも可能でした)。 @biocyberman、私はそれが受け入れられた答えであるべきだと思います – andreister

3

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 
14

今の私は、このようにそれを実行します。 新しい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 
0

これは本当に古いですが、同じことをやろうとしているとき、私はそれを偶然見つけて、私は」

現在起動し、私のRscript考える

args <- commandArgs(TRUE) 
df <- read.csv(args[1], sep=",", check.names=FALSE, row.names = 1) 
. 
. # Do some analysis and plotting etc. 
. 
を以下にしようとしてちょうど終わった、と人々が(ただし簡単引数のカップルを持っているコマンドに対してのみ、おそらく有用でしょう)、それを試してみたい場合は素晴らしく、迅速でありまし

あなたは「手動」argsベクトルを作ることができ、Rscriptがそうでなければ受け取ることになるというコマンドラインをエミュレートしたい:その後、

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

args[1]は、それが常に持っているのと同じ値をとります。 RStudioで強調表示して実行するだけで、スクリプト内のすべてを実行するだけです。

+0

スクリプト内で 'args < - commandArgs(TRUE)'がそれらを上書きしないように 'args'をスクリプトの外側に設定するにはどうすればよいですか? –

1

これは私の仕事: 次のように私の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" 
+0

'commandArgs()'関数を永久に変更します。 IMHOそれは貧しい解決策です。 –

1

たとえば、 argparserとRstudioを使用して対話的に分析/開発を続け、あなたが使用することができます回避策以下:

  1. my_rscriptであなたのコマンドラインパーサを書くと、すべての解析された入力を含むオブジェクトargsを作成します。
  2. argsオブジェクトをファイルに保存する行を追加します。
  3. コマンドラインからmy_rscriptを実行し、関心のある引数を指定します。
  4. Rstudio内のファイルからargsオブジェクトをロードし、対話的に

例続ける:あなたの質問は、具体的RStudioに関連すると思われるが、より一般的にRに、私は再びタグ付けなかった

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 
関連する問題