R: Use C-style String Formatting Commands

sprintf {base} | R Documentation

## Use C-style String Formatting Commands

### Description

A wrapper for the C function `sprintf`, that returns a character vector of length one containing a formatted combination of text and variable values.

### Usage

    sprintf(fmt, ...)

### Arguments

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

### Details

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`
  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
a space
  Prefix a space if the first number is not a sign
`0`
  For numbers, pad to the field width with leading zeros

### Value

A character vector of length one. Character `NA`s are converted to `"NA"`.

### Author(s)

Original code by Jonathan Rougier, J.C.Rougier@durham.ac.uk

### References

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.

### See Also

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

### Examples

    ## 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)))

[Package Contents]