NaN`表示"不是数字"。但是我发现了
的结果is.numeric(NaN)
是
[1] "TRUE"
有人知道为什么吗?我认为结果应该是FALSE
。
答案 0 :(得分:2)
“不是数字”并不意味着它不是一个数字。它是浮点数的特殊编码。请参阅 ANSI / IEEE 754浮点标准,或者只是NaN的维基百科页面。
这是所有计算语言的通用标准,R的处理也不例外。
在R中,typeof(NaN)
给出“double”,mode(NaN)
给出“numeric”。现在,如果您阅读?is.numeric
,如果is.numeric(x)
模式为“数字”并且不是因素,则会看到TRUE
返回x
。
IEEE标准定义了三个特殊的浮点数Inf
,-Inf
和NaN
。
前两个具有明确的数学意义:正无限和负无限。虽然它们不是实数的一部分,但它们是定义明确的限制。例如,1 / 0
为Inf
。
那么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
在这方面非常有用,它意味着“出了问题”。
请注意,与具有各种类型(NA
,NA_real_
等)的NA_integer_
不同,NaN
只有一种类型的浮点数。任何逻辑,字符,整数值都不是浮点数,因此不能是NaN
。 NA的定义不是通用标准,R有自己的标准。