当小数位数可能超过内部scipen选项时如何使用write.table

时间:2016-04-18 20:17:17

标签: r write.table

是否可以在不丢失精度的情况下编写以下向量? write.table文档说它的内部等价于' digits = 15'看起来scipen被忽略了。

a <- c(0.1111111111111123333, 0.11111111111111244, 0.1111111111111121111111)
options(scipen=22)
write.table(a, file="del.txt")

1 个答案:

答案 0 :(得分:1)

您可以使用format功能控制输出,然后再将其写入表格。例如,以下代码将您的矢量输出格式化为20位。

 write.table(format(a, digits=20), file="del.txt")

编辑:我尝试了一些事情,似乎无法让R更改号码。这是我尝试过的。

 print(c(0.1111111111111123333, 0.11111111111111244, 
         0.1111111111111121111111), digits=18)

[1] 0.111111111111112340 0.111111111111112437 0.111111111111112118

不好。

 a <- format(c(0.1111111111111123333, 0.11111111111111244, 
               0.1111111111111121111111), digits=19)

[1]&#34; 0.1111111111111123401&#34; &#34; 0.1111111111111124372&#34; &#34; 0.1111111111111121180&#34;

不好。

 write.table(sprintf("%.100f", a), file='del.txt')

不好。

我一直在寻找答案,但希望其他人会介入并清理它。