Hintergrund: Einige der auf dieser Seite vorgeschlagenen Antworten (z.B., signif
, options(digits=...)
) garantieren nicht, dass eine bestimmte Anzahl von Nachkommastellen für eine beliebige Zahl angezeigt wird. Ich nehme an, dass dies ein Designmerkmal von R ist, wobei die gute wissenschaftliche Praxis die Anzeige einer bestimmten Anzahl von Ziffern auf der Grundlage der Prinzipien von " aussagekräftige Zahlen ". Doch in vielen Bereichen (z.B., APA-Stil (z. B. in Geschäftsberichten) schreiben die Formatierungsvorschriften vor, dass eine bestimmte Anzahl von Dezimalstellen angezeigt werden muss. Dies geschieht oft aus Gründen der Konsistenz und Standardisierung und nicht, weil es um signifikante Zahlen geht.
Lösung :
Der folgende Code zeigt genau zwei Dezimalstellen für die Zahl x
.
format(round(x, 2), nsmall = 2)
Zum Beispiel:
format(round(1.20, 2), nsmall = 2)
# [1] "1.20"
format(round(1, 2), nsmall = 2)
# [1] "1.00"
format(round(1.1234, 2), nsmall = 2)
# [1] "1.12"
Eine allgemeinere Funktion lautet wie folgt, wobei x
ist die Zahl und k
ist die Anzahl der anzuzeigenden Dezimalstellen. trimws
entfernt alle führenden Leerzeichen, was bei einem Vektor von Zahlen nützlich sein kann.
specify_decimal <- function(x, k) trimws(format(round(x, k), nsmall=k))
Z.B.,
specify_decimal(1234, 5)
# [1] "1234.00000"
specify_decimal(0.1234, 5)
# [1] "0.12340"
Diskussion von Alternativen:
T formatC Antworten y sprintf-Antworten recht gut funktionieren. Sie zeigen jedoch in einigen Fällen negative Nullen an, was unerwünscht sein kann. D.h.,
formatC(c(-0.001), digits = 2, format = "f")
# [1] "-0.00"
sprintf(-0.001, fmt = '%#.2f')
# [1] "-0.00"
Eine mögliche Umgehung dieses Problems ist die folgende:
formatC(as.numeric(as.character(round(-.001, 2))), digits = 2, format = "f")
# [1] "0.00"