这个可重复的示例是我的代码的简化版本:
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
答案 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))