为啥 NA_real_ <= Inf 返回 NA?

Posted

技术标签:

【中文标题】为啥 NA_real_ <= Inf 返回 NA?【英文标题】:Why does NA_real_ <= Inf return NA?为什么 NA_real_ <= Inf 返回 NA? 【发布时间】:2019-08-21 00:33:21 【问题描述】:

Inf-InfNA_real_ 比较时返回的一些值让我感到惊讶。

具体来说:

NA_real_ <= Inf
#[1] NA
-Inf <= NA_real_
#[1] NA

documentation 的第一句为NA (help(NA)) 是

NA 是一个长度为 1 的逻辑常数,其中包含一个缺失值指示符。

我想一定有一些值不小于或等于Inf 和一些值不大于或等于-Inf。这些价值观是什么?你如何在 R 中表示它们?请提供完整列表。

我对@9​​87654332@ 有点熟悉,但这些计算产生的结果是否超出了double 可以存储的适当值的范围?我不知道Inf - Inf 到底是什么,但它不能大于Inf。在double 应该实现的IEEE 标准中,有什么比Inf 更大?该标准是否简单地定义任何涉及NaN 的操作都返回NaN?那为什么 R 不返回NaNNA 不是 IEEE 754 值,是吗?也许我误读了documentation?

【问题讨论】:

【参考方案1】:

你要指的地方是:

?Arithmetic
?Inf
?`>`

第一个表示一般使用IEEE 754:

R 依赖于操作系统服务(它们依赖于 FPU)来进行浮点运算。在所有当前的 R 平台上,都使用 IEC 60559(也称为 IEEE 754)算术,但这些标准中的某些内容是可选的。特别是,对非正规数(超出 .Machine 给出的范围)的支持可能因平台而异,甚至在单个平台上的计算之间也可能不同。

第二个表示无穷大的算术应该“有效”:

在 R 中,基本上所有数学函数(包括基本算术)都应该在 +/- Inf 和 NaN 作为输入或输出时正常工作。

但是,第三个表示任何涉及NA 的逻辑比较都会返回NA

缺失值 (NA) 和 NaN 值即使与它们自身也被视为不可比较,因此涉及它们的比较总是会导致 NA。

所以问题不在于某些东西“大于”Inf,而是当您调用与缺失值的比较时,R 返回缺失值。

【讨论】:

关于“任何涉及NA 的逻辑比较都返回NA:”is.finite(NA_real_) 返回FALSE(不是NA)。如果这不是一个逻辑比较,它属于哪个类别(根据 R 的逻辑)?我试图找到一种逻辑模式,这样我就不必每次需要了解这些东西时都查找它们。

以上是关于为啥 NA_real_ <= Inf 返回 NA?的主要内容,如果未能解决你的问题,请参考以下文章

c++中重载输出流对象,为啥要返回引用

在建项目时路径都设置好了,为啥在eclipse中运行maven项目时jar包没有到lib目录下,WEB-INF/lib是空的。

在WEB-INF下的jsp页面想要访问webapp下面的css/addBook.css文件为啥不能访问

为啥 (inf + 0j)*1 评估为 inf + nanj?

为啥 math.inf 是浮点数,为啥我不能将其转换为整数?

为啥 1**Inf 的值等于 1,而不是 NaN?