比较Inf
和-Inf
与NA_real_
时返回的一些值令我感到惊讶。
特别是:
NA_real_ <= Inf
#[1] NA
-Inf <= NA_real_
#[1] NA
NA
(help(NA)
)中documentation的第一句话是
NA
是长度为1的逻辑常量,其中包含一个缺失值指示符。
我想必须有一些不小于或等于Inf
的值和一些不大于或等于-Inf
的值。这些值是多少?您如何用R表示它们?请提供完整列表。
我对NaN
有点儿熟悉,但是难道不是由于计算结果超出了double
可以存储的适当值范围而产生的吗?我确实不知道Inf - Inf
是什么,但是它不能大于Inf
。比Inf
应该实现的IEEE标准中的double
大什么?该标准是否只是简单地定义涉及NaN
的任何操作都返回NaN
?那么R为什么不返回NaN
? NA
不是IEEE 754值,对吗?也许我误读了documentation?
答案 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而不是缺失值。