Andrie Andrie - 10 months ago 93
R Question

How to format a number as percentage in R?

One of the things that used to perplex me as a newby to R was how to format a number as a percentage for printing.

For example, display

. I have a number of workarounds for this, but none of these seem to be "newby friendly". For example:

m <- runif(5)

paste(round(100*m, 2), "%", sep="")
[1] "26.55%" "37.21%" "57.29%" "90.82%" "20.17%"

sprintf("%1.2f%%", 100*m)
[1] "26.55%" "37.21%" "57.29%" "90.82%" "20.17%"

Question: Is there a base R function to do this? Alternatively, is there a widely used package that provides a convenient wrapper?

Despite searching for something like this in
, I have yet to find a suitably convenient wrapper in base R.
didn't yield anything useful.
library(sos); findFn("format percent")
returns 1250 hits - so again not useful.
has a function
but this gives no control over rounding accuracy.

Answer Source

An update, several years later:

These days there is a percent function in the scales package, as documented in krlmlr's answer. Use that instead of my hand-rolled solution.

Try something like

percent <- function(x, digits = 2, format = "f", ...) {
  paste0(formatC(100 * x, format = format, digits = digits, ...), "%")

With usage, e.g.,

x <- c(-1, 0, 0.1, 0.555555, 1, 100)

(If you prefer, change the format from "f" to "g".)