Re: [R] Writing to a file with fixed precision

From: Marc Schwartz <MSchwartz_at_mn.rr.com>
Date: Tue 11 Oct 2005 - 11:07:24 EST

On Mon, 2005-10-10 at 19:50 -0400, Richard Hedger wrote:
> Hi,
> I'm trying to ouput to a filled with a fixed precision:
> eg. if I have data x=c(1.0,1.4,2.0), I want to be able to ouput the following to a file:
> 1.00000000000000
> 1.40000000000000
> 2.00000000000000
> I was wondering if there was a function to do this in R?
> Thanks,
> Richard

It is possible that someone has written such a function somewhere.

However, this is relatively easy using write.table(). You just need to pre-format the numeric values prior to writing to the file:

write.table(sprintf("%.14f", x), "data.txt", col.names = FALSE,

            row.names = FALSE, quote = FALSE)

Using sprintf(), we force the floats to have 14 decimal places. sprintf() outputs character vectors, so we remove the quoting of the resultant character vectors and don't write column/row names.

Note that if 'x' is a matrix, using sprintf() will return a vector. So you might want to use the following instead to retain the dims:

> x

     [,1] [,2] [,3] [,4]

[1,]    1    4    7   10
[2,]    2    5    8   11
[3,]    3    6    9   12

> x.fmt <- apply(x, 1, function(x) sprintf("%.14f", x))

> x.fmt

     [,1]                [,2]                [,3]               
[1,] "1.00000000000000"  "2.00000000000000"  "3.00000000000000" 
[2,] "4.00000000000000"  "5.00000000000000"  "6.00000000000000" 
[3,] "7.00000000000000" "8.00000000000000" "9.00000000000000" [4,] "10.00000000000000" "11.00000000000000" "12.00000000000000"

> write.table(x.fmt, "data.txt", col.names = FALSE, row.names = FALSE,

              quote = FALSE)

If needed, you can of course change the default delimiter from a " " to another character in write.table().

See ?write.table and ?sprintf.

HTH, Marc Schwartz



R-help@stat.math.ethz.ch mailing list
https://stat.ethz.ch/mailman/listinfo/r-help PLEASE do read the posting guide! http://www.R-project.org/posting-guide.html Received on Tue Oct 11 11:19:55 2005

This archive was generated by hypermail 2.1.8 : Fri 03 Mar 2006 - 03:40:41 EST