【问题标题】:how to deal with BigINT in R [duplicate]如何处理 R 中的 BigINT [重复]
【发布时间】:2018-04-04 04:41:34
【问题描述】:

我有一个 BigInt 号码。如果我尝试将它存储在 R

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

您可以注意到它丢失了最后几位数字的信息。我尝试了多种其他方法来解决这个问题,但没有运气,比如增加选项(数字 = 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 包或bit64library(gmp);as.bigz(a)
  • 试试options(scipen = 99),但我认为它仍然会丢失精度。
  • @RonakShah: 它仍然失去精度 R> options(scipen = 99) R> as.numeric(9223372036854775807) [1] 9223372036854777856 R> as.double(9223372036854775807) [1] 92238372s3847785607 >
  • @akrun : 很遗憾无法安装外部包
  • 在这种情况下,你会失去这么大的数字精度。

标签: r


【解决方案1】:

我们可以从bit64使用as.integer64

library(bit64)
as.integer64(as.character(a))
#integer64
#[1] 9223372036854775807

【讨论】:

  • 不幸的是,我无法安装问题中提到的外部包。
  • @shivankagrawal 那么,可能你可能不得不用降低的精度进行调整,即使你尝试使用as.character,它也会降低精度,即as.character(a)# [1] "9223372036854775808"检查最后一位四舍五入跨度>
猜你喜欢
  • 1970-01-01
  • 2017-07-31
  • 2011-08-23
  • 2019-06-15
  • 1970-01-01
  • 2021-12-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多