【发布时间】:2017-11-19 23:58:13
【问题描述】:
NaN` 表示“不是数字”。但是我发现
is.numeric(NaN)
是
[1] "TRUE"
有人知道为什么吗?我认为结果应该是FALSE。
【问题讨论】:
NaN` 表示“不是数字”。但是我发现
is.numeric(NaN)
是
[1] "TRUE"
有人知道为什么吗?我认为结果应该是FALSE。
【问题讨论】:
“不是一个数字”并不意味着它不是一个数字。它是浮点数的特殊编码。请参阅 ANSI/IEEE 754 浮点标准,或仅查看 NaN 的 Wikipedia 页面。
这是所有计算语言的通用标准,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有自己的。
【讨论】: