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))
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With