1. ホーム
  2. debugging

[解決済み] エラー時にRスクリプトの行番号を取得するには?

2022-09-15 22:33:22

質問

長い R スクリプトをコマンドラインから実行する場合 ( R --slave script.R ) から実行する場合、エラー時に行番号を表示させるにはどうしたらよいでしょうか。

可能な限りスクリプトにデバッグコマンドを追加したくないので、Rが他のほとんどのスクリプト言語と同じように動作するようにしたいのです。

どのように解決するのですか?

これは行番号を教えてくれませんが、コールスタックのどこで失敗が起こったかを教えてくれるので、非常に役に立ちます。

traceback()

[編集] コマンドラインからスクリプトを実行する場合、1つか2つの呼び出しをスキップする必要があります。 traceback() for interactive and non-interactive R sessionsを参照してください。

私は、通常のデバッグの容疑者なしでこれを行うための他の方法を知らないのです。

  1. debug()
  2. ブラウザ()
  3. options(error=recover) [その後にoptions(error = NULL)で元に戻す] 。

こちらの関連記事もご覧ください。

[編集:]

すみません...今見たら、コマンドラインから実行しているようですね。 その場合、options(error) 機能で作業することをお勧めします。 以下は簡単な例です。

options(error = quote({dump.frames(to.file=TRUE); q()}))

エラー状態のスクリプトはいくらでも凝ったものが作れるので、デバッグのために必要な情報を決めておけばよいでしょう。

その他、気になる部分(データベースへの接続など)があれば、tryCatch()関数でくくる。