Eines der Dinge, die mich als Neuling bei R verwirrten, war das Formatieren einer Zahl als Prozentsatz für das Drucken.
Zum Beispiel anzeigen 0.12345
als 12.345%
. Ich habe eine Reihe von Problemumgehungen dafür, aber keine davon scheint "neuartig freundlich" zu sein. Beispielsweise:
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%"
Frage: Gibt es dafür eine Basis-R-Funktion? Gibt es alternativ ein weit verbreitetes Paket, das eine praktische Verpackung bietet?
Trotz der Suche nach so etwas wie dieser in ?format
, ?formatC
und ?prettyNum
habe ich noch eine entsprechend bequeme Wrapper in der Basis zu finden R. ??"percent"
nichts brachte nützlich. library(sos); findFn("format percent")
gibt 1250 Treffer zurück - also wieder nicht sinnvoll. ggplot2
hat eine Funktion, percent
aber dies gibt keine Kontrolle über die Rundungsgenauigkeit.
sprintf
ist dies vollkommen in Ordnung für diese Untergruppe von R-Codierern, die zufällig auch Programmierer sind. Ich habe in meinem Leben viel programmiert, einschließlich COBOL (Schauder) und Fortran (zeigt mein Alter). Die sprintf
Formatierungsregeln halte ich jedoch nicht für offensichtlich (Übersetzung: WTF?). Und natürlich muss ein dedizierter Wrapper einfacher aufzurufen sein als sprintf, zum Beispiel:format_percent(x=0.12345, digits=2)
sprintf()
ist kaum zeitaufwändiger als herauszufinden, dass das Paket foo enthält format_percent()
. Was passiert, wenn der Benutzer dann nicht in Prozent formatieren möchte, sondern etwas anderes, das ähnlich ist? Sie müssen einen anderen Wrapper finden. Auf lange Sicht werden die Basiswerkzeuge von Vorteil sein.
%
das Kommentarzeichen in LaTeX das "Standard" -Berichtsformat für R ist. Obwohl es für die Beschriftung von Diagrammen nützlich sein kann, muss vorsichtig vorgegangen werden, wenn die formatierte Zahl umgeschichtet werden soll.
sprintf
scheint die Lieblingslösung auf den Mailinglisten zu sein, und ich habe keine bessere Lösung gesehen. Eine eingebaute Funktion ist sowieso nicht viel einfacher aufzurufen, oder?