[R] Format with n significant figures / digits

wannymahoots at gmail.com wannymahoots at gmail.com
Thu Aug 14 15:37:44 CEST 2008


Hi everyone,

I can't figure out how to format numbers to have a certain number of  
significant figures (as opposed to decimal places) without using  
scientific notation and including trailing zeros if necessary.

e.g. I would like to achieve the following:
0.800001  --->  0.8000
123.4567    --->    123.4
0.1234567  --->    0.1234
7.654321    --->    7.654
7654321     --->    7654000

It seems like it should be simple, but I can't seem to do this using  
sprintf.  Specifically, I get the following outputs:

 > vec = c(0.800001, 123.4567, 0.1234567, 7.654321, 7654321)

 > #  this specifies precision after decimal point, rather than  
significant figures
 > sprintf("%.4f", vec)	
[1] "0.8000"       "123.4567"     "0.1235"       "7.6543"        
"7654321.0000"

 > #  uses scientific notation, but significant figures are correct
 > sprintf("%.3e", vec)
[1] "8.000e-01" "1.235e+02" "1.235e-01" "7.654e+00" "7.654e+06"

 > #  correct number of significant figures, and without scientific  
notation, but has trailing zeros on large numbers
 > sprintf("%.4f", sprintf("%.3e", vec))
[1] "0.8000"       "123.5000"     "0.1235"       "7.6540"        
"7654000.0000"

Am I missing something obvious and can someone help me?

Many thanks



More information about the R-help mailing list