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

标签 r nan numeric

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-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。在这方面,任何 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/

相关文章:

python - Pandas :重新采样多索引数据帧

python - Python 中的双 IIF 语句

python - R、statmodels、sklearn 与逻辑回归分类任务的比较

r - R 基础对称矩阵中的图形可视化,其值为对角线

r - 更改 R 中 iGraph 中的节点/顶点不透明度

scala - 如何将类型限制为 Scala 中的特定类型

Java - 如何创建子字符串直到到达非数字字符?

r - 如何使用或不使用文档术语矩阵来对术语频率数据进行制表?

double.NaN - 这个违反直觉的功能是如何工作的?

c# - 如何使用数字创建枚举?