[R] strangely long floating point with write.table()

Mike Miller mbmiller+l at gmail.com
Sat Mar 15 04:03:50 CET 2014


On Fri, 14 Mar 2014, Duncan Murdoch wrote:

> On 14-03-14 8:59 PM, Mike Miller wrote:
>> What I'm using:
>> 
>> R version 3.0.1 (2013-05-16) -- "Good Sport"
>> Copyright (C) 2013 The R Foundation for Statistical Computing
>> Platform: x86_64-unknown-linux-gnu (64-bit)
>
> That's not current, but it's not very old...
>
>> According to some docs, options(digits) controls numerical precision in 
>> output of write.table().  I'm using the default value for digits:
>> 
>>> getOption("digits")
>> [1] 7
>> 
>> I have a bunch of numbers in a data frame that are only a few digits to 
>> the right of the decimal:
>
> That's not enough to reproduce this.  Put together a self-contained 
> reproducible example if you're wondering why something behaves as it 
> does. With just a bunch of output, you'll just get uninformed guesses.


Thanks for the tip.  Here's what I've done:

> data2 <- data[c(94,120),c(18,20,21)]
> save(data2, file="data2.Rdata")
> q("no")

$ R
> load("data2.Rdata")
> data2
       V18   V20      V21
94  0.008 0.008 0.000064
120 0.023 0.023 0.000529
> write.table(data2, file="data2.txt", sep="\t", row.names=F, col.names=F)

$ cat data2.txt
0.00800000000000001     0.00800000000000001     6.40000000000001e-05
0.0229999999999999      0.0229999999999999      0.000528999999999996

The data2.Rdata file is attached to this message.

I guess that is enough to reproduce this exact finding.  I don't know how 
it works in general.

I don't have a newer version of R available right now.  It did the same 
thing on an older version (2.15.1).

Interestingly, on a different machine with an even older version (2.12.2) 
I see something a little different:

0.008   0.008   6.40000000000001e-05
0.0229999999999999      0.0229999999999999      0.000528999999999996

Best,
Mike


More information about the R-help mailing list