R是否主要将数字视为两倍?
以下代码建议R将数字视为双精度数字。即使将其设为整数,经过一些计算它也很容易变成两倍。 (代码1)
同样,即使结果看起来像整数,也将其视为两倍。 (代码2)
我的理解正确吗?
代码1:
> typeof(5)
[1] "double"
> typeof( 5 / 1 )
[1] "double"
> typeof( as.integer(c(1,2,3)) )
[1] "integer"
> typeof( as.integer(c(1,2,3)) + 1 )
[1] "double"
> typeof( as.integer(c(1,2,3)) / 1 )
[1] "double"
代码2:
> 1 + 2
[1] 3
> typeof( 1 + 2)
[1] "double"
最佳答案
R以不同的方式处理数字。在R中,整数和双精度浮点数均默认为其32位版本。
正如Andrey指出的那样,R中有两种不同类型的数字。
1L, 2L, 3L, ....
,等效于as.integer(1)
以及他们的复杂同行。
文字就是这样的整数
typeof(1) #double
class(1) #numeric
typeof(1L) #integer
class(1L) #integer
定义明确。但是,在计算时,如果没有将计算的任何部分存储为小于或等于整数的类型,它将自动转换为双精度型:
typeof(1L + 1L) #integer
typeof(1L + 1) #double
typeof(1L + TRUE) #integer
typeof(1L * 3) #double
typeof(1L * 3L) #integer
但应该注意的是,由于R使用32位变量运行,因此与python 3.x相比,这些变量的范围有限。但是,可以通过使用64位整数的
bit64
和Rmpfr
包来解决32位变量(在大多数情况下!),该包为任意浮点精度提供接口(interface)(根据其文档)。关于r - R是否将数字在内部视为两倍?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/55683033/