سؤال

This reproducible example is a very simplified version of my code:

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

To me, NA (missing value) and NaN (not a number) are two completely different entities, why does na.rm remove NaN? How can I ignore NA and not NaN?

ps:I am using 64-bit R version 3.0.0 on Windows7.

Edit: Upon some more study I found that is.na returns true for NaN too! This is the cause of confusion for me.

is.na(NaN)
> TRUE
هل كانت مفيدة؟

المحلول

It's a language decision:

> is.na(NaN)
[1] TRUE

is.nan differentiates:

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

So you may need to call both.

نصائح أخرى

na.rm arguments in functions generally use is.na() or an analogous function.
And since is.na(NaN) == TRUE, you then get the behavior you're observing.

Now should NaN be treated as also NA? That is a different question ;)


The best way around this is to explicitly tell R how to handle NaN One example:

ifelse(any(is.nan(x)), NaN, min(x, na.rm=TRUE))
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top