使用na.rm = TRUE时会删除NaN

时间:2013-04-16 03:49:04

标签: r nan na na.rm

这个可重复的示例是我的代码的简化版本:

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(不是数字)是两个完全不同的实体,为什么na.rm删除NaN?如何忽略NA而不是NaN

ps:我在Windows7上使用的是64位R版本3.0.0。

修改 经过一些研究,我发现is.na的{​​{1}}也会返回true!这对我来说是一个混乱的原因。

NaN

2 个答案:

答案 0 :(得分:7)

这是一个语言决定:

> is.na(NaN)
[1] TRUE

is.nan区分:

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

所以你可能需要同时打电话。

答案 1 :(得分:3)

函数中的

na.rm参数通常使用is.na()或类似函数 从is.na(NaN) == TRUE开始,您就会得到您正在观察的行为。

现在 NaN应该被视为NA吗?这是一个不同的问题;)


解决此问题的最佳方法是明确告诉R如何处理NaN 一个例子:

ifelse(any(is.nan(x)), NaN, min(x, na.rm=TRUE))