10

この再現可能な例は、私のコードの非常に単純化されたバージョンです。

x <- c(NaN, 2, 3)

#This is fine, as expected
max(x)
> NaN

#Why does na.rm remove NaN?
max(x, na.rm=TRUE) 
> 3

私にとって、NA(欠損値) とNaN(数値ではない) は 2 つの完全に異なるエンティティna.rmですNaN。どうすれば無視できNAますNaNか?

ps: Windows7 で 64 ビット R バージョン 3.0.0 を使用しています。

編集:is.naさらに調査したところ、それもtrueを返す ことがわかりましたNaN!これが私にとって混乱の原因です。

is.na(NaN)
> TRUE
4

2 に答える 2

8

それは言語の決定です:

> is.na(NaN)
[1] TRUE

is.nan区別します:

> is.nan(NaN)
[1] TRUE
> is.nan(NA)
[1] FALSE

したがって、両方を呼び出す必要がある場合があります。

于 2013-04-16T03:51:31.647 に答える
3

na.rm関数の引数は、通常、is.na()または類似の関数を使用します。
以来is.na(NaN) == TRUE、観察している動作が得られます。

NaNも NA として扱われるべきですか? それは別の質問です;)


これを回避する最善の方法はR、処理方法を明示的に伝えることNaN です。

ifelse(any(is.nan(x)), NaN, min(x, na.rm=TRUE))
于 2013-04-16T03:53:32.227 に答える