Una delle cose che mi lasciava perplesso come un novizio di R era come formattare un numero come percentuale per la stampa.
Ad esempio, visualizza 0.12345
come 12.345%
. Ho una serie di soluzioni alternative per questo, ma nessuna di queste sembra essere "newby friendly". Per esempio:
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%"
Domanda: esiste una funzione R di base per farlo? In alternativa, esiste un pacchetto ampiamente utilizzato che fornisce un comodo wrapper?
Nonostante abbia cercato qualcosa del genere in ?format
, ?formatC
e ?prettyNum
, devo ancora trovare un wrapper convenientemente conveniente nella base R. ??"percent"
non ha prodotto nulla di utile. library(sos); findFn("format percent")
restituisce 1250 risultati, quindi di nuovo non utile. ggplot2
ha una funzione percent
ma questo non dà alcun controllo sulla precisione dell'arrotondamento.
sprintf
va perfettamente bene per quel sottoinsieme di programmatori R che sono anche programmatori. Ho codificato molto nella mia vita, tra cui COBOL (brivido) e fortran (mostra la mia età). Ma non considero sprintf
ovvie le regole di formattazione (traduzione: WTF?). E ovviamente un wrapper dedicato deve essere più facile da chiamare di sprintf, ad esempio:format_percent(x=0.12345, digits=2)
sprintf()
non richiede molto più tempo che scoprire che il pacchetto foo contiene format_percent()
. Cosa succede se l'utente non desidera formattare come percentuale ma qualcos'altro simile? Devono trovare un altro wrapper. A lungo termine l'apprendimento degli strumenti di base sarà vantaggioso.
%
è il carattere di commento in LaTeX, che è il formato di report "predefinito" per R. Quindi, sebbene possa essere utile per etichettare i grafici, bisogna fare attenzione se il numero formattato deve essere Sweaved.
sprintf
sembra essere la soluzione preferita nelle mailing list e non ho visto nessuna soluzione migliore. Qualsiasi funzione integrata non sarà comunque molto più semplice da chiamare, giusto?