Una de las cosas que solía dejarme perplejo como novato en R era cómo formatear un número como porcentaje para imprimir.
Por ejemplo, mostrar 0.12345
como 12.345%
. Tengo varias soluciones para esto, pero ninguna de estas parece ser "nueva para los amigos". Por ejemplo:
set.seed(1)
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%"
Pregunta: ¿Hay una función R base para hacer esto? Alternativamente, ¿hay un paquete ampliamente utilizado que proporcione una envoltura conveniente?
A pesar de buscar algo como esto en ?format
, ?formatC
y ?prettyNum
, todavía tengo que encontrar una envoltura convenientemente conveniente en la base R. ??"percent"
no produjo nada útil. library(sos); findFn("format percent")
devuelve 1250 visitas, así que de nuevo no es útil. ggplot2
tiene una función percent
pero esto no da control sobre la precisión de redondeo.
sprintf
está perfectamente bien para ese subconjunto de codificadores R que también resultan ser programadores. He codificado mucho en mi vida, incluyendo COBOL (estremecimiento) y fortran (muestra mi edad). Pero no considero sprintf
obvias las reglas de formato (traducción: ¿WTF?). Y, por supuesto, un contenedor dedicado debe ser más fácil de llamar que sprintf, por ejemplo:format_percent(x=0.12345, digits=2)
sprintf()
es apenas más tiempo que la de descubrir que el paquete foo contiene format_percent()
. ¿Qué sucede si el usuario no quiere formatear como porcentaje, sino algo similar? Necesitan encontrar otro contenedor. A la larga, aprender las herramientas básicas será beneficioso.
%
el carácter de comentario en LaTeX, que es el formato de informe "predeterminado" para R. Por lo tanto, si bien puede ser útil para etiquetar gráficos, se debe tener cuidado si el número formateado debe ser Sweaved.
sprintf
Parece ser la solución favorita en las listas de correo, y no he visto ninguna solución mejor. Cualquier función incorporada no será mucho más fácil de llamar de todos modos, ¿verdad?