r - 如何使R在存储时显示19位数字?
问题描述
我有一个带有键列的数据集,它基本上是一个 19 位整数。
我正在使用小标题,所以我options(pillar.sigfig = 22)
用来显示更大的数字而不是科学记数法。
问题是,我注意到存储在列中的数字和显示的数字略有不同,具体来说最后 3 位数字不同。
例如
options(pillar.sigfig = 22)
x <- 1099324498500011011
但是当我尝试返回号码时,我得到 1099324498500011 008。
我不确定为什么 R 会更改最后 3 位数字,因为它是一个键,它使我的数据无法用于分析。
我已经尝试过通常options(scipen = 999)
用于抑制科学记数法的方法,但它似乎不适用于小标题。
如何获得与我打算存储的相同的 19 位数字?
解决方案
很抱歉成为坏消息的承担者,但 R 只有
double
使用 64 位和大约 16 位小数精度的数字类型 ( )int
使用 32 位的整数类型 ( )
没有别的了。您可以强制打印功能向您显示19 位数字,但这仅意味着……您正在查看随机性的三位数字。
(可数)项的 19 位数字很常见,并且通常由(有符号或无符号)int64_t
类型提供。哪个 R 本身没有,integer64
但通过包中的调用来近似bit64
。
因此,以下可能是您唯一的解决方法:
> suppressMessages(library(bit64))
> x <- as.integer64("123456790123456789")
> x
integer64
[1] 123456790123456789
> x - 1
integer64
[1] 123456790123456788
>
好消息是,它得到了许多其他软件包的integer64
相当好的支持。data.table
PS它确实是19位数字:
> as.integer64(1.2e18) + 1
integer64
[1] 1200000000000000001
> as.integer64(1.2e19) + 1
integer64
[1] <NA>
Warning message:
In as.integer64.double(1.2e+19) : NAs produced by integer64 overflow
>
推荐阅读
- javascript - 使用 Leaflet 打开大量工具提示时性能不佳
- rancher - 我的容器正在运行哪个版本的图像?
- c++ - I didn't understand the change proposed in DR 2145 for [dcl.fct.def.general]/2
- php - 如何使用 PHP 释放 Port?
- r - 创建数据框列表,每个数据框在不同的列上排序
- python-3.x - 字典 (python)
- python - 重定向到具有自己独特模板的模型的最佳方法是什么?
- python - 用于字符串生成的随机分布双射映射生成器函数
- reactjs - react-admin SelectField 清除值 onChange
- java - java HashMap到文件和文件到HashMap输出null