9

何百回もループする大きなforループがあり、最後に次の警告が表示されます。

Warning messages:
1: In min(j, na.rm = TRUE) :
  no non-missing arguments to min; returning Inf

警告メッセージが生成された行をRに尋ねる方法はありますか?


以下のOPのコメント:「私は直接minを行として持っていません。おそらく他の関数にネストされています。そうでなければ、minからの問題であることがわかっていたので、質問しなかったでしょう。」

4

2 に答える 2

13

次の設定を試すことができます:

options(warn = 2)

...警告をエラーとして扱います。次に、コードが最初の警告で停止したら、を使用traceback()してスタックトレースを確認します。

ただし、これは最初の警告にのみ役立ちます。

デフォルトの動作に戻すには、次を使用します。

options(warn = 0)
于 2013-03-03T19:50:08.590 に答える
2

これは基本的なforループのハウツーであり、実際にはR依存していません

minあなたのラインが置かれる直前

 print(paste("j is", j, "\n"))  # or instead of j, use i, or whichever index you are using     
 min(j, na.rm = TRUE) 

そうすれば、エラーがどこにあるかがわかります。


よりR適切な解決策として、jがdata.frame、matrix、listなどからのものである場合、
どのチャンク(反復部分)にNAsしか含まれていないかを調べます。

そのためにあなたは次のようなものを使うことができます

  apply(myDF, 1, function(x) all(is.na(x)))
于 2013-03-03T20:07:37.413 に答える