为什么NA​​_real_ <= Inf返回NA?

时间:2019-03-30 04:16:36

标签: r compare nan na infinity

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

特别是:

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

NAhelp(NA))中documentation的第一句话是

  

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

我想必须有一些不小于或等于Inf的值和一些不大于或等于-Inf的值。这些值是多少?您如何用R表示它们?请提供完整列表。

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

1 个答案:

答案 0 :(得分:2)

指向您的位置是

?Arithmetic
?Inf
?`>`

第一个表示通常使用IEEE 754:

  

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

第二个数字表示无穷大的算术应该“起作用”:

  

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

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

  

缺失值(NA)和NaN值甚至被认为是不可比的,因此涉及它们的比较将始终导致NA。

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