質問

R には、数字の表示を制御するオプションがあります。例えば:

options(digits=10)

R セッションが終了するまで計算結果を 10 桁で返すことになっています。R のヘルプ ファイルでは、数値パラメーターの定義は次のとおりです。

数字:数値値を印刷するときに印刷する数字数を制御します。それは単なる提案です。有効な値はです 1...22 デフォルトで 7

したがって、これは単なる提案であると述べています。それ以上でも以下でもなく、常に 10 桁を表示したい場合はどうすればよいですか?

2 番目の質問は、22 桁を超える数字を表示したい場合はどうすればよいかということです。100桁のようなより正確な計算をするには?基本 R で可能ですか、それとも追加のパッケージ/関数が必要ですか?

編集: jmoyさんの提案のおかげで試してみました sprintf("%.100f",pi) そしてそれは与えた

[1] "3.1415926535897931159979634685441851615905761718750000000000000000000000000000000000000000000000000000"

小数点以下は 48 桁です。これがRが扱える限界でしょうか?

役に立ちましたか?

解決

これが単なる提案である理由は、オプション値を無視する print 関数を非常に簡単に作成できるためです。組み込みの印刷機能と書式設定機能は、 options 値をデフォルトとして設定します。

2 番目の質問に関しては、R は有限精度の算術演算を使用するため、小数点以下 15 桁または 16 桁を超えると答えが正確になりません。そのため、一般にそれ以上は必要ありません。の GMP そして rcdd パッケージは (gmp ライブラリへのインターフェースを介して) 多倍精度算術演算を処理しますが、これは主に double の小数点以下の桁数の増加ではなく、大きな整数に関連しています。

マセマティカ または メープル 小数点以下の桁数を好きなだけ指定できます。

編集:
小数点以下の桁と有効数字の違いについて考えると役立つかもしれません。有効数字 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 ベクトルですが、条件が不十分な問題やアルゴリズムが不安定な場合に便利です。

他のヒント

あなた自身を全体の出力を生成している場合、あなたはsprintf()を使用することができ、例えばます。

> sprintf("%.10f",0.25)
[1] "0.2500000000"

を指定します(%.10fがフロートとfが指定する10進ポイントのある.10に)10進ポイントを持つ浮動小数点数をフォーマットすること。

私は数字の正確な数を印刷するにはRのより高いレベルの機能を強制的にどのような方法を知りません。

あなたがRの通常の番号を印刷している場合は、64ビット倍精度を使用して得ることができる最高の精度は(.Machine $を見ては、あなたのシステムにdouble.eps)16桁程度であるため、

100桁の数字を表示すると、意味がありません。残りの桁はただの迷惑になります。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top