Rスクリプトをステップ実行したい。これを行う方法を探しているときに「デバッグ」コマンドを見ましたが、それは関数にのみ適用されるようです。このスクリプトには機能がありません。
「browser」コマンドは有望そうに見えたので、スクリプトの最初の行に「browser()」を入れましたが、実行したときに何もしなかったようです。
スクリプトを最初の行で一時停止して、ステップスルーできるようにするにはどうすればよいですか?
RStudioのIDEバージョン0.98.1102。
RStudioの新しいスクリプトの解決策:
ctrl+shift+n
_)break point
_を設定しますbreak point
_(赤い点)を設定するコード行番号の左をクリックするか、break point
_を設定するコード行にbrowser()
を追加しますSource on Save
_ボックス(Source
ウィンドウの上)をチェックし、ファイルを保存します。Source
ウィンドウの右上にあるSource
ボタンをクリックし、enter
にdebugSource("<yourfilename>")
+ Console
を入力する、またはctrl+shift+s
_と入力RStudioでのデバッグのその他の手順については、こちらをご覧ください ヘルプファイル (2015年4月23日12:59付)。
私はRStudioに不満を持っているので、次のことをお勧めします。
RStudioの優れた機能の1つは、RStudioサーバーがヘッドレスサーバー上で正常に実行できることです。次に、ローカルマシンのWebブラウザでhttp経由でサーバーに接続します。 EC2インスタンスでRを実行するときにこの構成を使用します。 RStudioは状態を維持するため、電車に乗っているときにインターネットにアクセスできなくなった場合、信号が返されるとRStudioは中断したところを正確に拾い上げ、リモートマシンは切断や再接続を認識しません。 RStudioサーバーは現在、FC/CentOSおよびDebian/Ubuntuでのみサポートされていることに注意してください。ただし、* nixの他のバリアントでコンパイルされる場合があります。
人気のある方法の1つは、「IDE」またはエディターからこれを行うことです。Emacs/ [〜#〜] ess [〜#〜] 非常にうまく実行し、他の人も実行します。
基本的な考え方は、カーソルの下の行、または関数、またはブロックを、関連するRプロセスに送信することです。 RStudio など、他のいくつかのエディターがこれをサポートしています。私の好みはまだ [〜#〜] ess [〜#〜] ですが、適切なものを見つけることができると確信しています。
最後に、browser()
et alはRプロセス内からそれを行うことができますが、少し先のとがったクリック音が少なくなります。ドキュメンテーション、またはChambers "Software for Data Analysis"(Springer、2008)などの本を読んでください。
個々の行ではなく完全な式を評価する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行を読み取る呼び出しです。
Rscriptを使用してコードを実行するとコメントで述べていますが、デバッグするには対話的に実行する必要があります。言い換えると、browser
を「動作」させるには、通常のRコンソールとsource
を起動してください。スクリプトの最初の行はbrowser()
であるため、すぐにプロンプトに戻り、「n」を使用してコードをステップ実行できます。ただし、本格的なRプロンプトであるため、変数名を入力するか割り当てるだけで、変数値を確認または変更することもできます。 (または実際、任意のR関数を呼び出します。)
別の回答 で示唆されているように、スクリプトの先頭に browser()
を挿入し、R
ではなくRscript
を実行してsource('myscript.Rscript')
からR
は、スクリプトがコンマライン引数を必要としない場合にトリックを行います(例: argparse )。
コマンドライン引数で実行する必要がある場合は、--args
オプション(たとえば、R --no-restore --no-save --args <your commandline args here>
)を使用してR
を呼び出すだけで、ソーススクリプトはRscriptを使用して呼び出されたかのように引数を確認します。 コマンドライン引数をsource
に渡す方法の問題 には他の解決策もありますが、source
が1回だけ呼び出されるこの特定のユースケースは対象としません。