我遇到以下问题。我有大约10-20位小数的数值。我在.csv(通过write.csv2())和数据库(通过RODBC包中的SQLSave())中编写这些值。所有小数都与我有关。 不幸的是,R在小数点后8位舍入数字。
举个例子:
5655698.697843645699322
变为:
5655698,69784365
我尝试增加$digits
中的位数(options()
),但这只影响我在控制台中看到的位数。
我尝试使用format(,digits=x)
这是有效的。然而,由于我有大量的列,这是非常昂贵的,它看起来不是一个干净的解决方案。
是否有另一种方法可以通过写入.csv和数据库来增加位数?
答案 0 :(得分:0)
你能尝试一下吗(但这只适用于txt文件而不适用于csv文件)?
x<-5655698.697843645699322
y<-sprintf("%.15f",x)
[1] "5655698.697843645699322"
write(y,"x.txt")
更新:
y<-format(round(x, 15), nsmall = 15)
write(y,"x.txt")
y<-format(round(x, 25), nsmall = 25)
Error in prettyNum(.Internal(format(x, trim, digits, nsmall, width, 3L, :
invalid 'nsmall' argument
错误意味着您不能将小数增加15以上(根据参数nsmall
)
y<-format(round(x, 25), nsmall = 15)
> y
[1] "5655698.697843645699322"
答案 1 :(得分:0)
R使用64位IEEE双精度作为基本数字格式。这精度限制为14-15 有效数字(不是小数位)。所以R只是将数字写到正确的精确极限。
如果需要更多小数,可以使用包进行任意精度算术: