5

R が丸められないようにするにはどうすればよいですか?

例えば、

> a<-893893084082902
> a
[1] 8.93893e+14

私はそこで多くの情報を失っています。私は signif() を試しましたが、私が望むことをしていないようです。

前もって感謝します!

(これは、私の学生が、1 秒あたりの数で 1,000 兆まで数えるのにどれくらいの時間がかかるかを判断しようとした結果として思いつきました)

4

3 に答える 3

21

丸めではありません。これは、大きな (または小さな) 数値を出力するためのデフォルトの形式です。

a <- 893893084082902
> sprintf("%f",a)
[1] "893893084082902.000000"

?optionsグローバル ソリューションについては、 の「数字」セクションを参照してください。

于 2011-07-12T19:12:25.100 に答える
7

R の整数制限を回避するには、R の gmp パッケージを使用できます: http://cran.r-project.org/web/packages/gmp/index.html

プロジェクトオイラーの課題で遊んでいて、因数分解を行う必要があるときに、このパッケージを発見しました。ただし、大きな整数の関数も提供します。

編集: この質問は、丸めに関するものほど大きな整数に関するものではなかったようです。しかし、次の宇宙旅行者のために、 を使った大整数演算の例を次に示しますgmp

ベースRを使用して1e500 * 1e500を掛けてみてください:

> 1e500 * 1e500
[1] Inf

したがって、gmpあなたと同じことを行うには、最初にそれが呼び出す大きな整数オブジェクトを作成する必要がありますbigz。本当に大きな数値の int や doubleを渡そうas.bigz()としてもうまくいきません。これを使用している理由gmpは、R がこれほど大きな数値を保持できないからです。そのため、文字列を渡します。したがって、次のコードは文字列操作から始まり、大きな文字列を作成します。

library(gmp)
o <- paste(rep("0", 500), collapse="")
a <- as.bigz(paste("1", o, sep=""))
mul.bigz(a, a)

気が向いたら、ゼロを数えることもできます。

于 2011-07-12T19:12:37.003 に答える
6

これにより、すべての数値に対してより多くの桁が表示されます。

options(digits=15)

または、単にそれが必要な場合a:

print(a, digits=15)
于 2011-07-12T19:18:01.453 に答える