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.12345comme 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, ?formatCet ?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. ggplot2a une fonction percentmais cela ne donne aucun contrôle sur la précision d'arrondi.
sprintfconvient 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 sprintfrè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.
sprintfsemble ê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?