与整数斗争(最大整数)

时间:2013-01-29 18:06:29

标签: r

我正在使用一个需要输入为整数的函数。

所以我一直在尝试read up on making things integers

y <- 3.14
as.integer(y)
[1] 3              # all cool

一切都很好,但如果我有

 x <- 1639195531833
 as.integer(x)
 [1] NA
 Warning message:
 NAs introduced by coercion 

我有options(digits = 15)并且它混淆了我为什么不工作但是在一个干净的会话中它必须与科学记数法有关。

我也试图欺骗R,但不高兴:

  as.integer(as.character(x))
[1] 2147483647
Warning message:
inaccurate integer conversion in coercion 

如何击败科学记数法并得到我的整数?

4 个答案:

答案 0 :(得分:43)

R可以容纳的最大整数是

.Machine$integer.max
# [1] 2147483647

这与科学记数法无关,而与计算机实际存储数字的方式有关。无论架构如何,当前版本的R存储整数仍为32位。这可能会在未来发生变化。

另见?as.integer

目前,您可以通过int64包

访问64位整数
> as.integer(.Machine$integer.max)
[1] 2147483647
> # We get problems with this
> as.integer(.Machine$integer.max + 1)
[1] NA
Warning message:
NAs introduced by coercion 
> # But if we use int64
> library(int64)
> as.int64(.Machine$integer.max) + 1L
[1] 2147483648

答案 1 :(得分:8)

更新Dason的答案(没有足够的声誉发表评论):

现在不推荐使用int64包,但是现在有一个名为bit64的包。我能够使用它获得相同的结果。语法仅从“as.int64”略微更改为“as.integer64”。

即。

library(bit64)
as.integer64(.Machine$integer.max) + 1L

答案 2 :(得分:3)

似乎已经弃用了int64。我使用包bit64,方法as.integer64()并解决问题。详情请参阅here

答案 3 :(得分:2)

有些类可以处理大整数。我使用int64,它的插图就在这里:

http://cran.r-project.org/web/packages/int64/vignettes/int64.pdf

要使用此功能,您只需将一些正常数字放入该类,然后您可以将其添加或乘以正常32位整数最大值的阈值。祝你好运。