| formatC {base} | R Documentation |
Formatting Using C-style Formats
Description
formatC() formats numbers individually and flexibly using
C style format specifications.
prettyNum() is used for “prettifying” (possibly
formatted) numbers, also in format.default.
.format.zeros(x), an auxiliary function of prettyNum(),
re-formats the zeros in a vector x of formatted numbers.
Usage
formatC(x, digits = NULL, width = NULL,
format = NULL, flag = "", mode = NULL,
big.mark = "", big.interval = 3L,
small.mark = "", small.interval = 5L,
decimal.mark = getOption("OutDec"),
preserve.width = "individual",
zero.print = NULL, replace.zero = TRUE,
drop0trailing = FALSE)
prettyNum(x, big.mark = "", big.interval = 3L,
small.mark = "", small.interval = 5L,
decimal.mark = getOption("OutDec"), input.d.mark = decimal.mark,
preserve.width = c("common", "individual", "none"),
zero.print = NULL, replace.zero = FALSE,
drop0trailing = FALSE, is.cmplx = NA,
...)
.format.zeros(x, zero.print, nx = suppressWarnings(as.numeric(x)),
replace = FALSE, warn.non.fitting = TRUE)
Arguments
x |
an atomic numerical or character object, possibly
|
digits |
the desired number of digits after the decimal
point ( Default: 2 for integer, 4 for real numbers. If less than 0,
the C default of 6 digits is used. If specified as more than 50, 50
will be used with a warning unless |
width |
the total field width; if both |
format |
equal to
|
flag |
for
There can be more than one of these flags, in any order. Other characters
used to have no effect for |
mode |
|
big.mark |
character; if not empty used as mark between every
|
big.interval |
see |
small.mark |
character; if not empty used as mark between every
|
small.interval |
see |
decimal.mark |
the character to be used to indicate the numeric decimal point. |
input.d.mark |
if |
preserve.width |
string specifying if the string widths should
be preserved where possible in those cases where marks
( |
zero.print |
logical, character string or |
replace.zero, replace |
logical; if This works via |
warn.non.fitting |
logical; if it is true, |
drop0trailing |
logical, indicating if trailing zeros,
i.e., |
is.cmplx |
optional logical, to be used when |
... |
arguments passed to |
nx |
numeric vector of the same length as |
Details
For numbers, formatC() calls prettyNum() when needed
which itself calls .format.zeros(*, replace=replace.zero).
(“when needed”: when zero.print is not
NULL, drop0trailing is true, or one of big.mark,
small.mark, or decimal.mark is not at default.)
If you set format it overrides the setting of mode, so
formatC(123.45, mode = "double", format = "d") gives 123.
The rendering of scientific format is platform-dependent: some systems
use n.ddde+nnn or n.dddenn rather than n.ddde+nn.
formatC does not necessarily align the numbers on the decimal
point, so formatC(c(6.11, 13.1), digits = 2, format = "fg") gives
c("6.1", " 13"). If you want common formatting for several
numbers, use format.
prettyNum is the utility function for prettifying x.
x can be complex (or format(<complex>)), here. If
x is not a character, format(x[i], ...) is applied to
each element, and then it is left unchanged if all the other arguments
are at their defaults. Use the input.d.mark argument for
prettyNum(x) when x is a character vector not
resulting from something like format(<number>) with a period as
decimal mark.
Because gsub is used to insert the big.mark
and small.mark, special characters need escaping. In particular,
to insert a single backslash, use "\\\\".
The C doubles used for R numerical vectors have signed zeros, which
formatC may output as -0, -0.000 ....
There is a warning if big.mark and decimal.mark are the
same: that would be confusing to those reading the output.
Value
A character object of same size and attributes as x (after
discarding any class), in the current locale's encoding.
Unlike format, each number is formatted individually.
Looping over each element of x, the C function
sprintf(...) is called for numeric inputs (inside the C
function str_signif).
formatC: for character x, do simple (left or right)
padding with white space.
Note
The default for decimal.mark in formatC() was changed in
R 3.2.0: for use within print methods in packages which might
be used with earlier versions: use decimal.mark = getOption("OutDec")
explicitly.
Author(s)
formatC was originally written by Bill Dunlap for S-PLUS, later
much improved by Martin Maechler.
It was first adapted for R by Friedrich Leisch and since much improved by the R Core team.
See Also
sprintf for more general C-like formatting.
Examples
xx <- pi * 10^(-5:4)
cbind(format(xx, digits = 4), formatC(xx))
cbind(formatC(xx, width = 9, flag = "-"))
cbind(formatC(xx, digits = 5, width = 8, format = "f", flag = "0"))
cbind(format(xx, digits = 4), formatC(xx, digits = 4, format = "fg"))
f <- (-2:4); f <- f*16^f
# Default ("g") format:
formatC(pi*f)
# Fixed ("f") format, more than one flag ('width' partly "enlarged"):
cbind(formatC(pi*f, digits = 3, width=9, format = "f", flag = "0+"))
formatC( c("a", "Abc", "no way"), width = -7) # <=> flag = "-"
formatC(c((-1:1)/0,c(1,100)*pi), width = 8, digits = 1)
## note that some of the results here depend on the implementation
## of long-double arithmetic, which is platform-specific.
xx <- c(1e-12,-3.98765e-10,1.45645e-69,1e-70,pi*1e37,3.44e4)
## 1 2 3 4 5 6
formatC(xx)
formatC(xx, format = "fg") # special "fixed" format.
formatC(xx[1:4], format = "f", digits = 75) #>> even longer strings
formatC(c(3.24, 2.3e-6), format = "f", digits = 11)
formatC(c(3.24, 2.3e-6), format = "f", digits = 11, drop0trailing = TRUE)
r <- c("76491283764.97430", "29.12345678901", "-7.1234", "-100.1","1123")
## American:
prettyNum(r, big.mark = ",")
## Some Europeans:
prettyNum(r, big.mark = "'", decimal.mark = ",")
(dd <- sapply(1:10, function(i) paste((9:0)[1:i], collapse = "")))
prettyNum(dd, big.mark = "'")
## examples of 'small.mark'
pN <- stats::pnorm(1:7, lower.tail = FALSE)
cbind(format (pN, small.mark = " ", digits = 15))
cbind(formatC(pN, small.mark = " ", digits = 17, format = "f"))
cbind(ff <- format(1.2345 + 10^(0:5), width = 11, big.mark = "'"))
## all with same width (one more than the specified minimum)
## individual formatting to common width:
fc <- formatC(1.234 + 10^(0:8), format = "fg", width = 11, big.mark = "'")
cbind(fc)
## Powers of two, stored exactly, formatted individually:
pow.2 <- formatC(2^-(1:32), digits = 24, width = 1, format = "fg")
## nicely printed (the last line showing 5^32 exactly):
noquote(cbind(pow.2))
## complex numbers:
r <- 10.0000001; rv <- (r/10)^(1:10)
(zv <- (rv + 1i*rv))
op <- options(digits = 7) ## (system default)
(pnv <- prettyNum(zv))
stopifnot(pnv == "1+1i", pnv == format(zv),
pnv == prettyNum(zv, drop0trailing = TRUE))
## more digits change the picture:
options(digits = 8)
head(fv <- format(zv), 3)
prettyNum(fv)
prettyNum(fv, drop0trailing = TRUE) # a bit nicer
options(op)
## The ' flag :
doLC <- FALSE # <= R warns, so change to TRUE manually if you want see the effect
if(doLC) {
oldLC <- Sys.getlocale("LC_NUMERIC")
Sys.setlocale("LC_NUMERIC", "de_CH.UTF-8")
}
formatC(1.234 + 10^(0:4), format = "fg", width = 11, flag = "'")
## --> ..... " 1'001" " 10'001" on supported platforms
if(doLC) ## revert, typically to "C" :
Sys.setlocale("LC_NUMERIC", oldLC)