L'une des choses qui me rendait perplexe en tant que nouveau venu chez R était de savoir comment formater un nombre en pourcentage pour l'impression.
Par exemple, affichez 0.12345
comme 12.345%
. J'ai un certain nombre de solutions de contournement pour cela, mais aucune de celles-ci ne semble être "newby friendly". Par exemple:
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%"
Question: Existe - t-il une fonction de base R pour ce faire? Sinon, existe-t-il un package largement utilisé qui fournit un emballage pratique?
Malgré la recherche de quelque chose comme ça dans ?format
, ?formatC
et ?prettyNum
, je dois encore trouver un emballage convenablement pratique dans la base R. ??"percent"
n'a donné quelque chose d' utile. library(sos); findFn("format percent")
renvoie 1250 hits - donc encore une fois pas utile. ggplot2
a une fonction percent
mais cela ne donne aucun contrôle sur la précision d'arrondi.
sprintf
convient parfaitement à ce sous-ensemble de codeurs R qui sont également des programmeurs. J'ai beaucoup codé dans ma vie, y compris COBOL (frisson) et fortran (montre mon âge). Mais je ne considère pas les sprintf
règles de formatage comme évidentes (traduction: WTF?). Et bien sûr, un wrapper dédié doit être plus facile à appeler qu'un sprintf, par exemple:format_percent(x=0.12345, digits=2)
sprintf()
ne prend guère plus de temps que de découvrir ce que contient le paquet fooformat_percent()
. Que se passe-t-il si l'utilisateur ne souhaite pas formater en pourcentage mais quelque chose d'autre qui est similaire? Ils ont besoin de trouver un autre emballage. À long terme, l'apprentissage des outils de base sera bénéfique.
%
c'est le caractère de commentaire dans LaTeX, qui est le format de rapport "par défaut" pour R. Donc, même s'il peut être utile pour étiqueter les graphiques, il faut faire attention si le nombre formaté doit être Sweaved.
sprintf
semble être la solution préférée sur les listes de diffusion, et je n'ai pas vu de meilleure solution. Toute fonction intégrée ne sera pas beaucoup plus simple à appeler de toute façon, non?