背景:このページで提案されているいくつかの回答(たとえば、signif
)options(digits=...)
は、任意の数に対して特定の小数点以下の桁数が表示されることを保証するものではありません。これはRの設計上の特徴であり、優れた科学的実践には「有効数字」の原則に基づいて特定の桁数を表示することが含まれると思います。ただし、多くのドメイン(APAスタイル、ビジネスレポートなど)では、フォーマット要件により、特定の小数点以下の桁数を表示する必要があります。これは、有効数字に関係するのではなく、一貫性と標準化の目的で行われることがよくあります。
解決策:
次のコードは、数値の小数点以下2桁を正確に示していますx
。
format(round(x, 2), nsmall = 2)
例えば:
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"
より一般的な関数は次のとおりです。ここx
で、は数値で、k
は表示する小数点以下の桁数です。trimws
数値のベクトルがある場合に役立つ可能性のある先頭の空白を削除します。
specify_decimal <- function(x, k) trimws(format(round(x, k), nsmall=k))
例えば、
specify_decimal(1234, 5)
# [1] "1234.00000"
specify_decimal(0.1234, 5)
# [1] "0.12340"
代替案の議論:
formatCの回答とsprintfの回答はかなりうまく機能します。ただし、望ましくない場合がある場合は、負のゼロが表示されます。つまり、
formatC(c(-0.001), digits = 2, format = "f")
# [1] "-0.00"
sprintf(-0.001, fmt = '%#.2f')
# [1] "-0.00"
これに対する1つの可能な回避策は、次のとおりです。
formatC(as.numeric(as.character(round(-.001, 2))), digits = 2, format = "f")
# [1] "0.00"