2013-04-16 8 views
8

を使用する場合、この再現の例では、私のコードの非常に簡略化されたバージョンで削除されます。私にのNaNをna.rm = TRUE

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.rmNaNを削除しますか? NAを無視してNaNを無視するにはどうすればよいですか?

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

編集:私はあまりにもNaNための真is.na戻りますことを発見し、いくつかのより多くの研究の際 !これが私の混乱の原因です。

is.na(NaN) 
> TRUE 

答えて

6

それは言語の決定です:

> is.na(NaN) 
[1] TRUE 

is.nanは区別:

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

ですから、両方を呼び出す必要があります。

+0

はい、私はこの動作を気づい:この周り


最良の方法は、明示的にNaN 一例をどのように扱うかRを伝えることです)、それは別の質問です。欠損値の私の考えは変わる必要があります。 – Nishanth

+0

@ e4e5f4私はおそらくこの動作を選択していないだろう、私は言語を設計していた。しかしそれはそれです。 –

+1

'sum'の助けを借りて' na.rm = TRUE'は 'NaN'と' NA'( '?Extremes'ではなく)の両方を取り除きます。 – mnel

3

na.rm関数の引数は、一般にis.na()または類似の関数を使用します。
is.na(NaN) == TRUE以降、あなたは観察している動作を取得します。

ここでとする必要がありますか?

ifelse(any(is.nan(x)), NaN, min(x, na.rm=TRUE)) 
関連する問題