NaN` 表示“不是数字”。然而我发现结果
is.numeric(NaN)
是
[1] "TRUE"
有人知道为什么吗?我认为结果应该是FALSE
。
最佳答案
“不是数字”并不真正意味着它不是数字。它是 float 的特殊编码。请参阅 ANSI/IEEE 754 浮点标准,或者直接查看 NaN 的 Wikipedia 页面。
这是所有计算语言的通用标准,R 的处理也不异常(exception)。
在 R 中,typeof(NaN)
给出“double”,mode(NaN)
给出“numeric”。现在,如果您阅读 ?is.numeric
,您会看到,如果 x
,则 is.numeric(x)
返回 TRUE
模式为“数字”,不是一个因素。
IEEE 标准定义了三种特殊 float :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
。在这方面,任何 float 之间的算术变得完全可表示。 NaN
在这方面信息非常丰富,它的意思是“出了问题”。
请注意,与具有多种类型(NA_real_
、NA_integer_
等)的 NA
不同,NaN
仅具有一种 float 类型。任何逻辑、字符、整数值都不是 float ,因此不能为 NaN。 NA 的定义不是通用标准,R 有自己的定义。
关于r - 在 R 中,为什么 is.numeric(NaN) 打印 "TRUE"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44602252/