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"
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…