NaN is removed when using na.rm=TRUE

2019-01-25 10:27发布

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

标签: r nan na na.rm
2条回答
等我变得足够好
2楼-- · 2019-01-25 10:56

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))
查看更多
小情绪 Triste *
3楼-- · 2019-01-25 11:04

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.

查看更多
登录 后发表回答