| 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,ife,E[-]m.ddde[+-]xx or [-]m.dddE[+-]xxg,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.nm) and the precision (n)-+0
A character vector of length one. Character NAs 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)))