我正在使用一个需要输入为整数的函数.
所以我一直在尝试阅读整数:
y <- 3.14
as.integer(y)
[1] 3 # all cool
Run Code Online (Sandbox Code Playgroud)
一切都很好,但如果我有
x <- 1639195531833
as.integer(x)
[1] NA
Warning message:
NAs introduced by coercion
Run Code Online (Sandbox Code Playgroud)
我曾经options(digits = 15)和它混淆了为什么它不起作用,但在一个干净的会议中它必须与科学记数法.
我也试图欺骗R,但不高兴:
as.integer(as.character(x))
[1] 2147483647
Warning message:
inaccurate integer conversion in coercion
Run Code Online (Sandbox Code Playgroud)
我如何击败科学记数法并得到我的整数?
Das*_*son 44
R可以容纳的最大整数是
.Machine$integer.max
# [1] 2147483647
Run Code Online (Sandbox Code Playgroud)
这与科学记数无关,也与计算机实际存储数字的方式有关.无论架构如何,当前版本的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
Run Code Online (Sandbox Code Playgroud)
更新Dason的答案(没有足够的声誉发表评论):
现在已经弃用了int64包,但是现在有一个名为bit64的包.我能够使用它获得相同的结果.语法仅从"as.int64"略微更改为"as.integer64".
即
library(bit64)
as.integer64(.Machine$integer.max) + 1L
Run Code Online (Sandbox Code Playgroud)