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 fmt . Only logical,
integer, real and character vectors are accepted, and only the first
value is read from each vector. |
This is a wrapper for the system sprintf
C-library function.
Attempts are made to
check that the mode of the values passed match the format supplied,
and R's special values (NA
, Inf
, -Inf
and
NaN
) are handled correctly.
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
f
e,E
[-]m.ddde[+-]xx
or [-]m.dddE[+-]xx
g,G
%e
or
%E
format if the exponent is less than -4 or greater than or
equal to the precision, and %f
format otherwises
%
%
(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
m
) and the precision (n
)-
+
0
A character vector of length one. Character NA
s are converted
to "NA"
.
Original code by 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 try(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)))