% File src/library/base/man/sprintf.Rd
% Part of the R package, https://www.R-project.org
% Copyright 1995-2021 R Core 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 character
  vector containing a formatted combination of text and variable values.
}
\usage{
sprintf(fmt, \dots)
gettextf(fmt, \dots, domain = NULL, trim = TRUE)
}
\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 coercion
    will be done: see the \sQuote{Details} section. Up to 100.}
  \item{trim, domain}{see \code{\link{gettext}}.}
}
\details{
  \code{sprintf} is a wrapper for the system \code{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 (\code{NA},
  \code{Inf}, \code{-Inf} and \code{NaN}) are handled correctly.

  \code{gettextf} is a convenience function which provides C-style
  string formatting with possible translation of the format string.

  The arguments (including \code{fmt}) are recycled if possible a whole
  number of times to the length of the longest, and then the formatting
  is done in parallel.  Zero-length arguments are allowed and will give
  a zero-length result.  All arguments are evaluated even if unused, and
  hence some types (e.g., \code{"symbol"} or \code{"language"}, see
  \code{\link{typeof}}) are not allowed. Arguments unused by \code{fmt}
  result in a warning. (The format \code{\%.0s} can be used to
  \dQuote{skip} an argument.)

  The following is abstracted from Kernighan and Ritchie (see
  References): however the actual implementation will follow the C99
  standard and fine details (especially the behaviour under user error)
  may depend on the platform. References to numbered arguments come from
  POSIX.

  The string \code{fmt} contains normal characters,
  which are passed through to the output string, and also conversion
  specifications 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{aAdifeEgGosxX\%}.  These letters denote the following types:

  \describe{
    \item{\code{d}, \code{i}, \code{o}, \code{x}, \code{X}}{Integer
      value, \code{o} being octal, 
      \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 to integer.  Formats \code{d} and \code{i}
      can also be used for logical variables, which will be converted to
      \code{0}, \code{1} or \code{NA}.
    }
    \item{\code{f}}{Double precision value, in \dQuote{\bold{f}ixed
        point} decimal notation of the form "[-]mmm.ddd".  The number of
      decimal places ("d") is specified by the precision: the default is 6;
      a precision of 0 suppresses the decimal point.  Non-finite values
      are converted to \code{NA}, \code{NaN} or (perhaps a sign followed
      by) \code{Inf}.
    }
    \item{\code{e}, \code{E}}{Double precision value, in
      \dQuote{\bold{e}xponential} decimal notation of the
      form \code{[-]m.ddde[+-]xx} or \code{[-]m.dddE[+-]xx}.
    }
    \item{\code{g}, \code{G}}{Double precision value, in \code{\%e} or
      \code{\%E} format if the exponent is less than -4 or greater than or
      equal to the precision, and \code{\%f} format otherwise.
      (The precision (default 6) specifies the number of
      \emph{significant} digits here, whereas in \code{\%f, \%e}, it is
      the number of digits after the decimal point.)
    }
    \item{\code{a}, \code{A}}{Double precision value, in binary notation
      of the form \code{[-]0xh.hhhp[+-]d}.  This is a binary fraction
      expressed in hex multiplied by a (decimal) power of 2.  The number
      of hex digits after the decimal point is specified by the precision:
      the default is enough digits to represent exactly the internal
      binary representation.  Non-finite values are converted to \code{NA},
      \code{NaN} or (perhaps a sign followed by) \code{Inf}.  Format
      \code{\%a} uses lower-case for \code{x}, \code{p} and the hex
      values: format \code{\%A} uses upper-case.

      This should be supported on all platforms as it is a feature of C99.
      The format is not uniquely defined: although it would be possible
      to make the leading \code{h} always zero or one, this is not
      always done.  Most systems will suppress trailing zeros, but a few
      do not.  On a well-written platform, for normal numbers there will
      be a leading one before the decimal point plus (by default) 13
      hexadecimal digits, hence 53 bits.  The treatment of denormalized
      (aka \sQuote{subnormal}) numbers is very platform-dependent.
    }
    \item{\code{s}}{Character string.  Character \code{NA}s are
      converted to \code{"NA"}.
    }
    \item{\code{\%}}{Literal \code{\%} (none of the extra formatting
      characters given below are permitted in this case).
    }
  }
  Conversion by \code{\link{as.character}} is used for non-character
  arguments with \code{s} and by \code{\link{as.double}} for
  non-double arguments with \code{f, e, E, g, G}.  NB: the length is
  determined before conversion, so do not rely on the internal
  coercion if this would change the length.  The coercion is done only
  once, so if \code{length(fmt) > 1} then all elements must expect the
  same types of arguments.

  In addition, between the initial \code{\%} and the terminating
  conversion character there may be, in any order:

  \describe{
    \item{\code{m.n}}{Two numbers separated by a period, denoting the
      field 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 only
      negative 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. For characters, this zero-pads on some platforms and is
      ignored on others.}
    \item{\code{#}}{specifies \dQuote{alternate output} for numbers, its
      action depending on the type:
      For \code{x} or \code{X}, \code{0x} or \code{0X} will be prefixed
      to a non-zero result.  For \code{e}, \code{e}, \code{f}, \code{g}
      and \code{G}, the output will always have a decimal point; for
      \code{g} and \code{G}, trailing zeros will not be removed.
    }
  }
  Further, immediately after \code{\%} may come \code{1$} to \code{99$}
  to refer to a numbered argument: this allows arguments to be
  referenced out of order and is mainly intended for translators of
  error messages.  If this is done it is best if all formats are
  numbered: if not the unnumbered ones process the arguments in order.
  See the examples.  This notation allows arguments to be used more than
  once, 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 an
  asterisk \code{*}: in this case an argument specifies the desired
  number.  A negative field width is taken as a '-' flag followed by a
  positive field width.  A negative precision is treated as if the
  precision were omitted.  The argument should be integer, but a double
  argument will be coerced to integer.

  There is a limit of 8192 bytes on elements of \code{fmt}, and on
  strings included from a single \code{\%}\emph{letter} conversion
  specification.

  Field widths and precisions of \code{\%s} conversions are interpreted
  as bytes, not characters, as described in the C standard.
  
  The C doubles used for \R numerical vectors have signed zeros, which
  \code{sprintf} may output as \code{-0}, \code{-0.000} \dots.
}
%% (for #) This is from Kernighan & Ritchie, p. 243:
%% For \code{o}, the first digit will be zero.


\value{
  A character vector of length that of the longest input.  If any
  element 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 encoding
  declared as UTF-8.  Otherwise it will be in the current locale's
  encoding.
}

\section{Warning}{
  The format string is passed down the OS's \code{sprintf} function, and
  incorrect formats can cause the latter to crash the \R process .  \R
  does perform sanity checks on the format, but not all possible user
  errors on all platforms have been tested, and some might be terminal.

  The behaviour on inputs not documented here is \sQuote{undefined},
  which means it is allowed to differ by platform.
}

\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.

  The C Standards, especially ISO/IEC 9899:1999 for \sQuote{C99}.  Links
  can be found at
  \url{https://developer.r-project.org/Portability.html}.

  \url{https://pubs.opengroup.org/onlinepubs/9699919799/functions/snprintf.html }
  for POSIX extensions such as numbered arguments.

  \command{man sprintf} on a Unix-alike system.
}

\author{
  Original code by Jonathan Rougier.
}

\seealso{
  \code{\link{formatC}} for a way of formatting vectors of numbers in a
  similar fashion.

  \code{\link{paste}} for another way of creating a vector combining
  text and values.

  \code{\link{gettext}} for the mechanisms for the automated translation
  of text.
}

% Escape all the '%' here !
\examples{
## 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)      # OK
try(sprintf("\%s is \%i feet tall\n", "Sven", 7.1)) # not OK
    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 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)

## re-use one argument three times, show difference between \%x and \%X
xx <- 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"))

\donttest{## Platform-dependent bad example from qdapTools 1.0.0:
## may pad with spaces or zeroes.
sprintf("\%09s", month.name)}

n <- 1:18
sprintf(paste0("e with \%2d digits = \%.", n, "g"), n, exp(1))

## Using arguments out of order
sprintf("second \%2$1.0f, first \%1$5.2f, third \%3$1.0f", pi, 2, 3)

## Using asterisk for width or precision
sprintf("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 arguments
sprintf("\%s \%d", "test", 1:3)

## binary output showing rounding/representation errors
x <- seq(0, 1.0, 0.1); y <- c(0,.1,.2,.3,.4,.5,.6,.7,.8,.9,1)
cbind(x, sprintf("\%a", x), sprintf("\%a", y))
}
\keyword{print}
\keyword{character}
