2017-08-04 62 views
2

我正在处理非常精确的数字(最大位数)。write.csv precision R

我注意到R中的write.csv(x)有时是整数。

有没有人注意到这样的事情? 保存的默认位数是多少?

+0

这个问题是面向程序设计的,所以我正在投票将它迁移到stackexachange.com,因为它在这里是脱离主题。 – Tim

+0

看看这里:https://stackoverflow.com/questions/1089018/why-cant-decimal-numbers-be-represented-exactly-in-binary – Ferdi

+0

和在这里:https://stackoverflow.com/questions/21895756 /为什么 - 是 - 浮点数字,不准确 – Ferdi

回答

5

书面文档中,

在几乎所有情况下的数字量的转换管辖 由选项“scipen”(见options),但随着digits = 15内部等效 。为了更好地进行控制,请使用format制作一个字符 矩阵/数据帧,然后在该位置调用write.table

所以,简单的解决办法是改变options,即

options(digits = DESIRED_VALUE) 

和定制的解决方案是将您的变量转换为字符类型与format,例如

dat <- mtcars 
dat$wt <- format(dat$wt, digits = 20) 

并将它保存为这样。不过要注意的是,在使用计算机时,我们总是使用来处理舍入数字(请参阅Gldberg,1991,What Every Computer Scientist Should Know About Floating-Point Arithmetic),并且您可能发现计算机精确度会产生棘手的结果。

format(2.620, digits = 20) 
## [1] "2.6200000000000001066" 

所以没有什么“坏”带圆角值,你可能需要他们不仅要准确达到一定的小数位数。而且,测量误差也会影响您的测量结果,因此精度可能是虚幻的。