[解決済み] Rでプリント出力の小数点以下の桁数を制御する
質問
Rには桁の表示を制御するためのオプションがあります。例えば
options(digits=10)
は、Rのセッションが終了するまで、計算結果を10桁で表示することになっています。Rのヘルプでは、digitsパラメータは以下のように定義されています。
digits: 数値を表示する際に表示する桁数を指定します。 数値を表示する際の桁数を制御します。 あくまで目安です。有効な値 は 1...22 で、デフォルトの 7
ということで、これはあくまで提案であると書かれています。それ以上でも以下でもなく、常に10桁を表示したい場合はどうすればいいのでしょうか?
2つ目の質問は、22桁以上、つまり100桁のようなより正確な計算のために表示したい場合はどうしたらよいでしょうか?それは基本的な R で可能ですか、それともそのための追加のパッケージ/関数が必要ですか?
編集してください。
jmoyさんのご指摘により、試しに
sprintf("%.100f",pi)
を試してみたところ
[1] "3.1415926535897931159979634685441851615905761718750000000000000000000000000000000000000000000000000000"
となっており、小数点以下が48桁あります。これはRが処理できる最大限度でしょうか?
どのように解決するのですか?
提案に過ぎない理由は、オプションの値を無視する印刷関数を非常に簡単に書くことができるからです。 組み込みの印刷・書式設定関数では、オプション値を無視するために
options
の値をデフォルトとして使用します。
2つ目の質問ですが、Rは有限精度演算を使用しているので、答えは小数点以下15桁か16桁以上では正確ではないので、一般的にはそれ以上は必要ありません。 その gmp と rcdd パッケージは (gmp ライブラリへのインタフェースを介して) 多倍精度演算を扱いますが、これは倍数の小数点以下の桁数よりも大きな整数に関係することがほとんどです。
Mathematica または メイプル を使えば、小数点以下の桁数を好きなだけ指定することができます。
EDITです。
小数点以下と有効数字の違いについて考えてみるといいかもしれませんね。 もし、有効数字15桁以上の差に依存するような統計的検定を行っているのであれば、その分析はほぼ間違いなくクズでしょう。
一方、非常に小さな数を扱っているだけなら、R は以下のような小さな数を扱うことができるので、それほど問題ではありません。
.Machine$double.xmin
(通常2e-308)程度まで扱えるからです。
これら2つの解析を比較します。
x1 <- rnorm(50, 1, 1e-15)
y1 <- rnorm(50, 1 + 1e-15, 1e-15)
t.test(x1, y1) #Should throw an error
x2 <- rnorm(50, 0, 1e-15)
y2 <- rnorm(50, 1e-15, 1e-15)
t.test(x2, y2) #ok
最初のケースでは、数値間の差は有効数字が多くなってからしか発生しないので、データはほぼ一定になります。 2つ目のケースでは、数値間の差の大きさは同じですが、数値自体の大きさに比べると、大きな差になっています。
e3boさんがおっしゃっているように、多精度の浮動小数点数を使うには
Rmpfr
パッケージで使用できます。
mpfr("3.141592653589793238462643383279502884197169399375105820974944592307816406286208998628034825")
これらは、通常の(倍精度)より遅く、より多くのメモリを消費します。
numeric
ベクトルよりも遅いですが、条件の悪い問題や不安定なアルゴリズムがある場合に有用です。
関連
-
[解決済み] NumPyの配列を切り詰めずに、完全に表示するにはどうしたらよいですか?
-
R - よくあるエラーとその原因 - 注意事項
-
R言語エラー:図の余白が大きすぎる 解決方法
-
[解決済み] "エラーです。Rでテーマの書式を保存する際に「Don't know how to add RHS to the theme object」(テーマオブジェクトにRHSを追加する方法がわかりません)と表示されます。
-
[解決済み] R:自然対数を使った方程式をnlsで使う
-
[解決済み] Javaで数値を小数点以下n桁に丸める方法
-
[解決済み] ベクトル中のxの値を持つ要素の個数を数える
-
[解決済み] 文字列が数字だけを含むかどうかをチェックする
-
[解決済み] psqlの代替出力フォーマット
-
[解決済み】Rの小数点以下の桁数の書式設定
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
R 描画エラー plot.new() : 図形の余白が大きすぎる
-
Rの警告 "条件の長さが1より大きいので、最初の要素しか使えない "に対する解決策
-
[解決済み] Rで複数行のコメントを持つことは可能ですか?[重複している]。
-
[解決済み] データフレームを結合(マージ)する方法(内側、外側、左側、右側)
-
[解決済み] 関数のソースコードを見るにはどうしたらいいですか?
-
[解決済み] なぜ `[`] は `subset` よりも優れているのですか?
-
[解決済み] data.frameの1つの列の名前を変更する方法は?
-
[解決済み】R関数でオプション引数を指定する "正しい "方法
-
[解決済み] データフレームのカラムのデータ型を決定する
-
[解決済み] 2つの単語の最初の文字を大文字にします。