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

时间:2017-06-17 08:05:48

标签: r nan numeric

NaN`表示"不是数字"。但是我发现了

的结果
is.numeric(NaN)

[1] "TRUE"

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

1 个答案:

答案 0 :(得分:2)

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

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

在R中,typeof(NaN)给出“double”,mode(NaN)给出“numeric”。现在,如果您阅读?is.numeric,如果is.numeric(x)模式为“数字”并且不是因素,则会看到TRUE返回x

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在这方面非常有用,它意味着“出了问题”。

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