在 R 中,为什么 is.numeric(NaN) 打印 "TRUE"?

In R, why does is.numeric(NaN) print "TRUE"?

NaN` 表示 "Not a Number"。但是我发现

的结果
is.numeric(NaN)

[1] "TRUE"

有人知道为什么吗?我认为结果应该是 FALSE.

"Not a Number" 并不意味着它不是一个数字。它是浮点数的一种特殊编码。请参见 ANSI/IEEE 754 浮点标准,或者只是 NaN 的维基百科页面。

这是所有计算语言的通用标准,R的处理也不例外。

在 R 中,typeof(NaN) 给出 "double",mode(NaN) 给出 "numeric"。现在,如果您阅读 ?is.numeric,您会看到 is.numeric(x) returns TRUE 如果 x 具有模式 "numeric" 并且不是一个因素。

IEEE标准定义了三个特殊的浮点数,Inf-InfNaN

前两个有明确的数学意义:正无穷大和负无穷大。虽然它们不是实数的一部分,但它们是定义明确的极限。例如,1 / 0Inf.

那么NaN是什么意思呢?准确地说是非实数。简单的情况是

0 / 0  # can be either Inf or -Inf
sqrt(-1)  # not well-defined on real number set
Inf - Inf  # can not be decided, can be 0, Inf or -Inf

在数值计算中,如果结果不能写成正实数,或Inf-Inf,则表示为NaN。在这方面,任何浮点数之间的算术运算都变得完全可表示。 NaN 在这方面非常有用,它表示 "something has gone wrong".


请注意,与具有多种类型(NA_real_NA_integer_ 等)的 NA 不同,NaN 只有一种浮点数类型。任何逻辑、字符、整数值都不是浮点数,因此不能是 NaN。 NA的定义不是一个通用的标准,R有自己的定义。