sprintf {base} | R Documentation |
A wrapper for the C function sprintf
, that
returns a character vector of length one containing a formatted
combination of text and variable values.
sprintf(fmt, ...)
fmt |
a format string |
... |
values to be passed into |
The following is abstracted from K&R (see References, below). The
string fmt
contains normal characters, which are passed through
to the output string, and also special characters that operate on the
arguments provided through ...
. Special characters start
with a %
and terminate with one of the letters in the set
difeEgGs%
. These letters denote the following types:
d,i
Integer value
f
Double precision value, in decimal notation of the form "[-]mmm.ddd". The number of decimal places is specified by the precision: the default is 6; a precision of 0 suppresses the decimal point.
e,E
Double precision value, in decimal notation of the form
[-]m.ddde[+-]xx
or [-]m.dddE[+-]xx
g,G
Double precision value, in %e
or
%E
format if the exponent is less than -4 or greater than or
equal to the precision, and %f
format otherwise
s
Character string
%
Literal %
(none of the formatting
characters given below are permitted in this case)
In addition, between the initial %
and the terminating
conversion character there may be, in any order:
m.n
Two numbers separated by a period, denoting the
field width (m
) and the precision (n
)
-
Left adjustment of converted argument in its field
+
Always print number with sign
Prefix a space if the first number is not a sign
0
For numbers, pad to the field width with leading zeros
Note that the arguments are simply passed through to sprintf
,
and so any formatting errors, e.g. passing a float to the conversion
character i
, are replicated in the resulting string. See the
examples for an illustration.
A character vector of length one.
Jonathan Rougier, J.C.Rougier@durham.ac.uk
Kernighan, B. W. and Ritchie, D. M. (1988) The C Programming Language. Second edition, Prentice Hall. describes the format options in table B-1 in the Appendix.
formatC
for a way of formatting vectors of
numbers in a similar fashion, paste
for another way of
creating a vector combining text and values.
## be careful with the format: most things in R are floats
sprintf("%s is %f feet tall\n", "Sven", 7) # OK
sprintf("%s is %i feet tall\n", "Sven", 7) # not OK
sprintf("%s is %i feet tall\n", "Sven", as.integer(7)) # OK again
## use a literal % :
sprintf("%.0f%% said yes (out of a sample of size %.0f)", 66.666, 3)
## various formats of pi :
sprintf("%f", pi)
sprintf("%.3f", pi)
sprintf("%1.0f", pi)
sprintf("%5.1f", pi)
sprintf("%05.1f", pi)
sprintf("%+f", pi)
sprintf("% f", pi)
sprintf("%-10f", pi)# left justified
sprintf("%e", pi)
sprintf("%E", pi)
sprintf("%g", pi)
sprintf("%g", 1e6 * pi) # -> exponential
sprintf("%.9g", 1e6 * pi) # -> "fixed"
sprintf("%G", 1e-6 * pi)
## no truncation:
sprintf("%1.f",101)
## More sophisticated:
lapply(c("a", "ABC", "and an even longer one"),
function(ch) sprintf("10-string `%10s'", ch))
sapply(1:18, function(n)
sprintf(paste("e with %2d digits = %.",n,"g",sep=""),
n, exp(1)))