10

这个可重现的示例是我的代码的一个非常简化的版本:

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(missing value) 和NaN(not a number) 是两个完全不同的实体,为什么na.rmremove NaN?我怎么能忽略NA而不是NaN

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

编辑: 经过更多研究,我发现它也is.na返回 true NaN!这是我困惑的原因。

is.na(NaN)
> TRUE
4

2 回答 2

8

这是一个语言决定:

> is.na(NaN)
[1] TRUE

is.nan区分:

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

因此,您可能需要同时调用两者。

于 2013-04-16T03:51:31.647 回答
3

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

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


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

ifelse(any(is.nan(x)), NaN, min(x, na.rm=TRUE))
于 2013-04-16T03:53:32.227 回答