web-dev-qa-db-ja.com

最初からRスクリプトをステップ実行する方法は?

Rスクリプトをステップ実行したい。これを行う方法を探しているときに「デバッグ」コマンドを見ましたが、それは関数にのみ適用されるようです。このスクリプトには機能がありません。

「browser」コマンドは有望そうに見えたので、スクリプトの最初の行に「browser()」を入れましたが、実行したときに何もしなかったようです。

スクリプトを最初の行で一時停止して、ステップスルーできるようにするにはどうすればよいですか?

30
Greg

RStudioのIDEバージョン0.98.1102。

RStudioの新しいスクリプトの解決策:

  1. 新しいRスクリプトを作成します(_ctrl+shift+n_)
  2. ファイルにコードを入力してください
  3. で_break point_を設定します
    • a)_break point_(赤い点)を設定するコード行番号の左をクリックするか、
    • b)_break point_を設定するコード行にbrowser()を追加します
  4. ファイルを保存する
  5. デバッグモードに入り、でファイルを取得します。
    • a)_Source on Save_ボックス(Sourceウィンドウの上)をチェックし、ファイルを保存します。
    • b)Sourceウィンドウの右上にあるSourceボタンをクリックし、
    • c)enterdebugSource("<yourfilename>") + Consoleを入力する、または
    • d)_ctrl+shift+s_と入力
  6. デバッグプロセスを実行する

RStudioでのデバッグのその他の手順については、こちらをご覧ください ヘルプファイル (2015年4月23日12:59付)。

19
Daniel Fletcher

私はRStudioに不満を持っているので、次のことをお勧めします。

  1. ダウンロード RStudio
  2. Rスクリプトを開きます
  3. 最初の行にカーソルを置きます
  4. ctrl + Enter(PC/Linux)またはCommand + Return(Mac)をクリックします
  5. 繰り返す!

RStudioの優れた機能の1つは、RStudioサーバーがヘッドレスサーバー上で正常に実行できることです。次に、ローカルマシンのWebブラウザでhttp経由でサーバーに接続します。 EC2インスタンスでRを実行するときにこの構成を使用します。 RStudioは状態を維持するため、電車に乗っているときにインターネットにアクセスできなくなった場合、信号が返されるとRStudioは中断したところを正確に拾い上げ、リモートマシンは切断や再接続を認識しません。 RStudioサーバーは現在、FC/CentOSおよびDebian/Ubuntuでのみサポートされていることに注意してください。ただし、* nixの他のバリアントでコンパイルされる場合があります。

8
JD Long

人気のある方法の1つは、「IDE」またはエディターからこれを行うことです。Emacs/ [〜#〜] ess [〜#〜] 非常にうまく実行し、他の人も実行します。

基本的な考え方は、カーソルの下の行、または関数、またはブロックを、関連するRプロセスに送信することです。 RStudio など、他のいくつかのエディターがこれをサポートしています。私の好みはまだ [〜#〜] ess [〜#〜] ですが、適切なものを見つけることができると確信しています。

最後に、browser() et alはRプロセス内からそれを行うことができますが、少し先のとがったクリック音が少なくなります。ドキュメンテーション、またはChambers "Software for Data Analysis"(Springer、2008)などの本を読んでください。

7

個々の行ではなく完全な式を評価するRのみのソリューションの場合、これを試してください。

_sourcep <- function(file){
  coms <- parse(file)
  for (i in seq_along(coms)){
    print(coms[[i]])
    eval(coms[[i]],envir=.GlobalEnv)
    mess <- paste("Expression",i,"of",length(coms),"parsed. Press <return> to continue.")
    cat(mess)
    readLines(n=1)
  }
}
_

sourceを呼び出すようにこれを呼び出します(ただし、これははるかに基本的なものであり、そのオプションは含まれていません)。基本的に、parseを使用してソースファイルから解析済みの未評価の式のリストを作成し、このリストを反復処理して式を出力し、グローバル環境で評価してから、進行します。最後の行は、一時停止を作成する行です。stdin()から1行を読み取る呼び出しです。

6
James

Rscriptを使用してコードを実行するとコメントで述べていますが、デバッグするには対話的に実行する必要があります。言い換えると、browserを「動作」させるには、通常のRコンソールとsourceを起動してください。スクリプトの最初の行はbrowser()であるため、すぐにプロンプ​​トに戻り、「n」を使用してコードをステップ実行できます。ただし、本格的なRプロンプトであるため、変数名を入力するか割り当てるだけで、変数値を確認または変更することもできます。 (または実際、任意のR関数を呼び出します。)

5
Davor Cubranic

別の回答 で示唆されているように、スクリプトの先頭に browser() を挿入し、RではなくRscriptを実行してsource('myscript.Rscript')からRは、スクリプトがコンマライン引数を必要としない場合にトリックを行います(例: argparse )。

コマンドライン引数で実行する必要がある場合は、--argsオプション(たとえば、R --no-restore --no-save --args <your commandline args here>)を使用してRを呼び出すだけで、ソーススクリプトはRscriptを使用して呼び出されたかのように引数を確認します。 コマンドライン引数をsourceに渡す方法の問題 には他の解決策もありますが、sourceが1回だけ呼び出されるこの特定のユースケースは対象としません。

2
user3780389