r - 导入具有许多数字的(64位)整数时,R中出现奇怪的错误

标签 r precision digits read.csv

我正在导入具有单个列的csv,该列包含非常长的整数(例如:2121020101132507598)

a<-read.csv('temp.csv',as.is=T)



当我将这些整数作为字符串导入时,它们可以正确通过,但是当作为整数导入时,最后几位数字会更改。我不知道发生了什么...

1 "4031320121153001444" 4031320121153001472
2 "4113020071082679601" 4113020071082679808
3 "4073020091116779570" 4073020091116779520
4 "2081720101128577687" 2081720101128577792
5 "4041720081087539887" 4041720081087539712
6 "4011120071074301496" 4011120071074301440
7 "4021520051054304372" 4021520051054304256
8 "4082520061068996911" 4082520061068997120
9 "4082620101129165548" 4082620101129165312

最佳答案

正如其他人指出的那样,您不能表示那么大的整数。但是R并未将这些值读取为整数,而是将其读取为 double 数字。

double 只能将数字精确地表示为约16位,这就是为什么您看到数字在16位后四舍五入的原因。有关可能的解决方案,请参见gmpRmpfrint64软件包。尽管我看不到其中任何一个读取文件的功能,但也许您可以通过查看它们的来源来制作一些东西。

更新:
将文件放入int64对象的方法如下:

# This assumes your numbers are the only column in the file
# Read them in however, just ensure they're read in as character
a <- scan("temp.csv", what="")
ia <- as.int64(a)

关于r - 导入具有许多数字的(64位)整数时,R中出现奇怪的错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11441035/

相关文章:

rbindfill 像向量列表的合并

r - 如何获得应用功能产生副作用?

c++ - 浮点值 0.0 的表示方式是否与其他浮点值不同?

python - 使用 sklearn 数字数据集预测数字 - 错误

android - 使用安卓 :Digits attribute to restrict characters stops action next button working

r - 美观必须是长度1或者与数据问题是ggplot相同

r - 如何根据来自多个列的多个条件创建一个新列?

c - 使用 GNU/GCC 四精度库出错

image - OpenGL:GL_R11F_G11F_B10F的精度对于8位RGB图像来说好吗?

java - 1000位字符串,不使用数组求最大5位