write.csv precision R

时间:2017-08-04 07:37:21

标签: r csv rounding

我正在处理非常精确的数字(最大位数)。

我注意到R中的write.csv(x)有时围绕数字。

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

1 个答案:

答案 0 :(得分:7)

如文档中所述,

  

在几乎所有情况下,数字量的转换都受到约束   通过选项“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"

所以没有任何“坏”的舍入值,因为你可能只需要精确到一些小数位。此外,您的测量也会受到测量误差的影响,因此精度可能是虚幻的。