33

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

所以我一直在尝试阅读有关制作整数的内容

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

4 回答 4

51

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
于 2013-01-29T18:10:24.107 回答
12

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

int64 包现已弃用,但现在有一个名为 bit64 的包。我能够使用它达到相同的结果。语法从“as.int64”到“as.integer64”仅略有变化。

IE

library(bit64)
as.integer64(.Machine$integer.max) + 1L
于 2017-05-22T16:34:20.637 回答
4

似乎 int64 已被弃用。我使用包bit64,方法as.integer64()并解决了问题。详情参考这里

于 2017-04-06T08:24:35.063 回答
2

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

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

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

于 2013-01-29T18:14:41.880 回答