R で小数点以下の桁数をフォーマットする 質問する

R で小数点以下の桁数をフォーマットする 質問する

たとえば、1.128347132904321674821 という数字があり、これを画面に出力するとき (またはファイルに書き込むとき) に小数点以下 2 桁のみで表示したいのですが、どうすればよいですか?

x <- 1.128347132904321674821

編集:

の用法:

options(digits=2)

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

--

答え: round(x, digits=2)

ベストアンサー1

背景:このページで提案されている回答の中には (例: signifoptions(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" 

おすすめ記事