3

多くのネストされた関数を含む長くて複雑なコード (> 7000 行) があり、それぞれが個別の tryCatch で囲まれています。コードは「疑似エラー」を除いて完全に機能します。

Error in doWithOneRestart(return(expr), restart): no function to return from, jumping to top level 

doWithOneRestart()tryCatch 関数の要素として R の内部にある。これを「疑似エラー」と呼んでいます。なぜなら、エラーが発生したstop()場合に tryCatch を実行してエラー メッセージをログ ファイルに書き込む必要があるからです。代わりに、この「エラー」はプログラムを停止させず (実際にはまったく影響を与えません)、コンソールにのみ表示され、ログ ファイルには書き込まれません。エラーは再現できない (!) ため、通常のデバッグ手順では役に立ちませんでした。エラーは、プログラムのさまざまな処理段階で発生する可能性があります。警告オプションを 0 または -1 に変更しても役に立ちません。

プログラムがジョブを実行するため、このエラーは重大ではありません。しかし、何が起こっているのかを理解したいと思います。誰かがすでに同じ問題を経験しているか、独自のデバッグ戦略を考え出している可能性があります...

更新 (2013 年 10 月 28 日): 問題の原因がわかりました。これは、Java ヒープ オーバーフローの問題に関連しています (Excel ファイルの読み取りに xlsx パッケージを使用していました)。他にも多くの問題があります。Excel ファイルへの接続が閉じられているにもかかわらず (間違いなく!)、システムはそれを未使用の接続と見なし ( をtraceback()参照)、接続を閉じようとしますが、既に閉じられていることがわかります。 -error" であり、正確に同時に発生することはありません (再現性はありません)。適切な場所でガベージコレクターgc()を使用すると、問題が解決しました。スクリプトは現在、数日間安定して動作しています。

4

1 に答える 1