如何在R中处理BigINT

5

我有一个BigInt数字。如果我尝试将其存储在R中

  R> a <- 9223372036854775807
  R> a
   [1] 9.223372e+18

正如您所注意到的,它正在丢失最后几位数字的信息。我尝试了多种其他方法来解决这个问题,但没有成功,例如增加选项(digits = 22)或更改为数字、双精度浮点数、整数。

 > as.integer(9223372036854775807)
  [1] NA
  Warning message:
  NAs introduced by coercion to integer range 
 R> as.numeric(9223372036854775807)
  [1] 9.223372e+18
 R> as.double(9223372036854775807)
  [1] 9.223372e+18

有人能帮我解决这个问题吗?我想保留相同的原始值,也不想安装任何外部包。


您可能需要检查gmp包或bit64,即library(gmp);as.bigz(a) - akrun
尝试使用 options(scipen = 99),但我认为它仍会失去精度。 - Ronak Shah
@RonakShah: 它仍然丢失精度 R> options(scipen = 99) R> as.numeric(9223372036854775807) [1] 9223372036854777856 R> as.double(9223372036854775807) [1] 9223372036854777856 - shivank agrawal
@akrun:外部软件包不幸无法安装。 - shivank agrawal
在这种情况下,您将会失去大数的精度。 - akrun
1个回答

4
我们可以使用来自bit64as.integer64
library(bit64)
as.integer64(as.character(a))
#integer64
#[1] 9223372036854775807

1
很遗憾,我无法安装问题中提到的外部包。 - shivank agrawal
@shivankagrawal 那么,你可能需要调整精度。即使你尝试使用as.character,它也会降低准确性,例如as.character(a)# [1] "9223372036854775808",请注意最后一位数字已经被四舍五入了。 - akrun

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接