r - R 是否在内部将数字视为 double ?

标签 r integer double

R 是否主要将数字视为 double ?

以下代码表明 R 将数字视为 double 。即使我把它变成整数,经过一些计算它也很容易变成双倍。 (代码1)

此外,即使结果看起来像整数,也会被视为 double 。 (代码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 中,整数和 double float 都默认为它们的 32 位版本。

正如 Andrey 所指出的,R 中有两种不同类型的数字。

  1. 文字 1L, 2L, 3L, ....,这等同于 as.integer(1)
  2. 常规数字(1、2、3.4,实际上是任何数字)

以及它们复杂的对应物。

字面量本身就是整数

typeof(1)  #double
class(1)   #numeric
typeof(1L) #integer
class(1L)  #integer

定义明确。但是在计算时,如果计算的任何部分没有存储为低于或等于整数的类型,它将自动转换为 double :

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 相比,这些变量的范围有限。然而,人们可以绕过 32 位变量(在大多数情况下!),方法是对 64 位整数使用包 bit64 和为任意浮点精度提供接口(interface)的 Rmpfr(根据他们的文档)。

编辑

我错误地指出“在 R 中,整数和 double float 都默认为它们的 32 位版本”。 double 变量不是这种情况,现在几乎所有 R 版本都默认使用 64 位对应变量。

关于r - R 是否在内部将数字视为 double ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55683033/

相关文章:

r - R中的累积排名第n项

r - 函数中的术语是什么意思?

r - 关于 roxygen2 UTF-8 的警告

java - 如果输入非整数如何打印错误?

c++ - 如何在 C++ 中将大数字字符串转换为整数?

linq - 分组为连续整数范围

r - 使用 R 进行网页抓取(抓取隐藏号码 "Click here to show number")

java - 双数不太准确

c - 如何将 double 向下舍入到 C 中最接近的较小整数?

css - 如何摆脱第二个滚动条?