我正在处理非常精确的数字(最大位数)。
我注意到R中的write.csv(x)
有时围绕数字。
有没有人注意到这样的事情? 保存的默认位数是多少?
答案 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"
所以没有任何“坏”的舍入值,因为你可能只需要精确到一些小数位。此外,您的测量也会受到测量误差的影响,因此精度可能是虚幻的。