1. ホーム
  2. r

[解決済み】Rの小数点以下の桁数の書式設定

2022-03-26 17:15:53

質問

1.128347132904321674821のように、画面に出力する(またはファイルに書き出す)ときに小数点以下2桁まで表示させたい数値があります。どのようにすればよいのでしょうか?

x <- 1.128347132904321674821

EDIT

使用することです。

options(digits=2)

が提案されています。一度だけ使用するために、スクリプト内でこれを指定する方法はありますか?スクリプトに追加しても何も変わらないようですし、各数字をフォーマットするために多くの再入力をすることには興味がありません(非常に大きなレポートを自動化しています)。

--

答え:round(x, digits=2)

解き方は?

背景は? このページで提案されているいくつかの回答(例. 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"

これを回避する方法として、次のようなものが考えられます。

formatC(as.numeric(as.character(round(-.001, 2))), digits = 2, format = "f")
# [1] "0.00"