【发布时间】:2020-11-19 22:48:29
【问题描述】:
我有一个整数18495608239531729,它在某种意义上给我的data.table包带来了一些麻烦,当我从存储这么大数字的csv文件中读取数据时,它将它们存储为integer64
现在我想像dt[big_integers == 18495608239531729] 这样过滤我的data.table,这给了我一个数据类型不匹配(比较integer64 和double)。
我想既然18495608239531729 是一个很大的数字,我或许应该使用bit64 包来处理数据类型。
所以我做到了:
library(bit64)
as.integer64(18495608239531729)
> integer64
> [1] 18495608239531728
我认为 integer64 应该能够处理更大的值而不会出现任何问题?
所以我做到了:
as.integer64(18495608239531729) == 18495608239531729
> [1] TRUE
那时我更快乐,但后来我想,为什么不试试:
as.integer64(18495608239531728)
> integer64
> [1] 18495608239531728
这也导致我尝试:
as.integer64(18495608239531728) == as.integer64(18495608239531729)
> [1] TRUE
在不损失精度的情况下,在 R 中处理大数的正确方法是什么?从技术上讲,就我而言,我没有对所述列进行任何数学运算,因此我可以将其视为字符向量(尽管我担心会占用更多内存,并且加入 r data.table 会更慢? )
【问题讨论】:
标签: r data.table double bigint int64