Skip to content
Prev 78746 / 398502 Next

Writing to a file with fixed precision

On Mon, 2005-10-10 at 19:50 -0400, Richard Hedger wrote:
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:
[,1] [,2] [,3] [,4]
[1,]    1    4    7   10
[2,]    2    5    8   11
[3,]    3    6    9   12
[,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"
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