mb14 - 1 month ago 4x
R Question

# Is there an R function to format number using unit prefix

Is there a R function (or any package) allowing to format numbers (integer) using standard unit prefix (Kilo, Mega etc ...), so

``````10 -> 10
100 -> 1K
0.01 - > 10m
``````

etc ...
I can do it myself but I would prefer to not reinvent the wheel.

``````require(sitools)
f2si(80000)
[1] "80 k"
f2si(8E12)
[1] "8 T"
``````

It seems to be very simplistic as it appends two spaces if no SI prefix is used:

``````f2si(80)
[1] "80  "
``````

The function is easy to modify to include rounding. I also fixed the issue with appended spaces.

``````f2si2<-function (number,rounding=F)
{
lut <- c(1e-24, 1e-21, 1e-18, 1e-15, 1e-12, 1e-09, 1e-06,
0.001, 1, 1000, 1e+06, 1e+09, 1e+12, 1e+15, 1e+18, 1e+21,
1e+24)
pre <- c("y", "z", "a", "f", "p", "n", "u", "m", "", "k",
"M", "G", "T", "P", "E", "Z", "Y")
ix <- findInterval(number, lut)
if (lut[ix]!=1) {
if (rounding==T) {
sistring <- paste(round(number/lut[ix]), pre[ix])
}
else {
sistring <- paste(number/lut[ix], pre[ix])
}
}
else {
sistring <- as.character(number)
}
return(sistring)
}

f2si2(12345)
[1] "12.345 k"
f2si2(12345,T)
[1] "12 k"
``````