【问题标题】:In R, why does is.numeric(NaN) print "TRUE"?在 R 中,为什么 is.numeric(NaN) 打印“TRUE”?
【发布时间】:2017-11-19 23:58:13
【问题描述】:

NaN` 表示“不是数字”。但是我发现

is.numeric(NaN)

[1] "TRUE"

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

【问题讨论】:

    标签: r nan numeric


    【解决方案1】:

    “不是一个数字”并不意味着它不是一个数字。它是浮点数的特殊编码。请参阅 ANSI/IEEE 754 浮点标准,或仅查看 NaN 的 Wikipedia 页面。

    这是所有计算语言的通用标准,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 在这方面信息量很大,它的意思是“出了点问题”。


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

    【讨论】:

      猜你喜欢
      • 2019-01-01
      • 2013-02-02
      • 2021-06-18
      • 2013-12-17
      • 2020-02-28
      • 2020-03-12
      • 2015-01-29
      • 2017-03-26
      相关资源
      最近更新 更多