Rev 45844 | Blame | Compare with Previous | Last modification | View Log | Download | RSS feed
% File src/library/base/man/sprintf.Rd% Part of the R package, http://www.R-project.org% Copyright 1995-2008 R Core Development Team% Distributed under GPL 2 or later\name{sprintf}\alias{sprintf}\alias{gettextf}\title{Use C-style String Formatting Commands}\description{A wrapper for the C function \code{sprintf}, that returns a charactervector containing a formatted combination of text and variable values.}\usage{sprintf(fmt, \dots)gettextf(fmt, \dots, domain = NULL)}\arguments{\item{fmt}{a character vector of format strings, each of up to 8192 bytes.}\item{\dots}{values to be passed into \code{fmt}. Only logical,integer, real and character vectors are supported, but some coercionwill be done: see the \sQuote{Details} section.}\item{domain}{see \code{\link{gettext}}.}}\details{\code{sprintf} is a wrapper for the system \code{sprintf} C-libraryfunction. Attempts are made to check that the mode of the valuespassed match the format supplied, and \R's special values (\code{NA},\code{Inf}, \code{-Inf} and \code{NaN}) are handled correctly.\code{gettextf} is a convenience function which provides C-stylestring formatting with possible translation of the format string.The arguments (including \code{fmt}) are recycled if possible a wholenumber of times to the length of the longest, and then the formattingis done in parallel.The following is abstracted from Kernighan and Ritchie(see References). The string \code{fmt} contains normal characters,which are passed through to the output string, and also conversionspecifications which operate on the arguments provided through\code{\dots}. The allowed conversion specifications start with a\code{\%} and end with one of the letters in the set\code{difeEgGsxX\%}. These letters denote the following types:\describe{\item{\code{d, i, x, X}}{Integer value, \code{x} and \code{X}being hexadecimal (using the same case for \code{a-f} as the code).Numeric variables with exactly integer values will be coerced tointeger. Formats \code{d} and \code{i} can also be used forlogical variables, which will be converted to \code{0}, \code{1}or \code{NA}.}\item{\code{f}}{Double precision value, in decimal notation of theform "[-]mmm.ddd". The number of decimal places is specified bythe precision: the default is 6; a precision of 0 suppresses thedecimal point. Non-finite values are converted to \code{NA},\code{NaN} or (perhaps a sign followed by) \code{Inf}.}\item{\code{e, E}}{Double precision value, in decimal notation of theform \code{[-]m.ddde[+-]xx} or \code{[-]m.dddE[+-]xx}.}\item{\code{g, G}}{Double precision value, in \code{\%e} or\code{\%E} format if the exponent is less than -4 or greater than orequal to the precision, and \code{\%f} format otherwise.}\item{\code{s}}{Character string. Character \code{NA}s areconverted to \code{"NA"}.}\item{\code{\%}}{Literal \code{\%} (none of the extra formattingcharacters given below are permitted in this case).}}Conversion by \code{\link{as.character}} is used for non-characterarguments with \code{s} and by \code{\link{as.double}} fornon-double arguments with \code{f, e, E, g, G}. NB: the length isdetermined before conversion, so do not rely on the internalcoercion if this would change the length. The coercion is done onlyonce, so if \code{length(fmt) > 1} then all elements must expect thesame types of arguments.In addition, between the initial \code{\%} and the terminatingconversion character there may be, in any order:\describe{\item{\code{m.n}}{Two numbers separated by a period, denoting thefield width (\code{m}) and the precision (\code{n}).}\item{\code{-}}{Left adjustment of converted argument in its field.}\item{\code{+}}{Always print number with sign: by default onlynegative numbers are printed with a sign.}\item{a space}{Prefix a space if the first character is not a sign.}\item{\code{0}}{For numbers, pad to the field width with leading zeros.}}Further, immediately after \code{\%} may come \code{1$} to \code{99$}to refer to numbered argument: this allows arguments to bereferenced out of order and is mainly intended for translators oferror messages. If this is done it is best if all formats arenumbered: if not the unnumbered ones process the arguments in order.See the examples. This notation allows arguments to be used more thanonce, in which case they must be used as the same type (integer,double or character).A field width or precision (but not both) may be indicated by anasterisk \code{*}: in this case an argument specifies the desirednumber. A negative field width is taken as a '-' flag followed by apositive field width. A negative precision is treated as if theprecision were omitted. The argument should be integer, but a doubleargument will be coerced to integer.There is a limit of 8192 bytes on elements of \code{fmt} and also onstrings included by a \code{\%s} conversion specification.Field widths and precisions of \code{\%s} conversions are interpretedas bytes, not characters, as described in the C standard.Character inputs with embedded nul bytes will be truncated at the first nul.}\value{A character vector of length that of the longest input. If anyelement of \code{fmt} or any character argument is declared as UTF-8,the element of the result will be in UTF-8 and have the encodingdeclared as UTF-8. Otherwise it will be in the current locale'sencoding.}\references{Kernighan, B. W. and Ritchie, D. M. (1988)\emph{The C Programming Language.} Second edition, Prentice Hall.describes the format options in table B-1 in the Appendix.}\author{Original code by Jonathan Rougier, \email{J.C.Rougier@durham.ac.uk}.}\seealso{\code{\link{formatC}} for a way of formatting vectors of numbers in asimilar fashion.\code{\link{paste}} for another way of creating a vector combiningtext and values.\code{\link{gettext}} for the mechanisms for the automated translationof text.}\examples{% Escape all the '%' here !## be careful with the format: most things in R are floats## only integer-valued reals get coerced to integer.sprintf("\%s is \%f feet tall\n", "Sven", 7.1) # OKtry(sprintf("\%s is \%i feet tall\n", "Sven", 7.1)) # not OKtry(sprintf("\%s is \%i feet tall\n", "Sven", 7)) # OK## 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 justifiedsprintf("\%e", pi)sprintf("\%E", pi)sprintf("\%g", pi)sprintf("\%g", 1e6 * pi) # -> exponentialsprintf("\%.9g", 1e6 * pi) # -> "fixed"sprintf("\%G", 1e-6 * pi)## no truncation:sprintf("\%1.f",101)## re-use one argument three times, show difference between \%x and \%Xxx <- sprintf("\%1$d \%1$x \%1$X", 0:15)xx <- matrix(xx, dimnames=list(rep("", 16), "\%d\%x\%X"))noquote(format(xx, justify="right"))## More sophisticated:sprintf("min 10-char string '\%10s'",c("a", "ABC", "and an even longer one"))n <- 1:18sprintf(paste("e with \%2d digits = \%.",n,"g",sep=""), n, exp(1))## Using arguments out of ordersprintf("second \%2$1.0f, first \%1$5.2f, third \%3$1.0f", pi, 2, 3)## Using asterisk for width or precisionsprintf("precision \%.*f, width '\%*.3f'", 3, pi, 8, pi)## Asterisk and argument re-use, 'e' example reiterated:sprintf("e with \%1$2d digits = \%2$.*1$g", n, exp(1))## re-cycle argumentssprintf("\%s \%d", "test", 1:3)}\keyword{print}\keyword{character}