2011-07-12 61 views
2

如何防止R舍入?防止R舍入

例如,

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

我失去了很多資料在那裏。我嘗試過signif(),它似乎沒有做我想要的。

在此先感謝!

(這想出了爲礦山試圖確定它需要多長時間以每秒數數到一萬億學生的結果)

回答

13

它不四捨五入;它只是打印大(或小)數字的默認格式。

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

有關全局解決方案,請參閱?options的「位數」部分。

+0

同樣'一個 - 8.93893e + 14'給'[1 ] 84082902' – Henry

+0

當然,我應該先檢查一下! –

+0

謝謝約書亞!我現在明白了。我不會丟失信息,它只是沒有顯示。是否有推薦的顯示數字? – Michael

6

要解決的r整數限制,您可以使用GMP包R:http://cran.r-project.org/web/packages/gmp/index.html

我與項目歐拉挑戰玩,需要做的因式分解時發現這個包。但它也爲大整數提供函數。

編輯: 看起來這個問題並不是真正的一個關於大整數,而是關於四捨五入。但對於未來的太空旅行者誰上臺這樣,這裏的大整數運算的例子有gmp

嘗試和繁殖1e500 * 1e500使用基礎R:

> 1e500 * 1e500 
[1] Inf 

所以做同樣與gmp你首先需要創建一個大的整數對象,它叫做bigz。如果你試圖通過as.bigz()一個int或者一個非常大的數字的兩倍,它將不起作用,因爲我們使用gmp的全部原因是因爲R不能保持這麼大的數字。所以我們傳遞一個字符串。因此,下面的代碼從字符串操作開始創建大字符串:

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

如果您如此傾向,則可以計算零。

+1

感謝您在這裏回答問題,Google帶我到這裏來回答這個問題。 ;-) –

3

這會告訴你更多的數字所有數字:

options(digits=15) 

或者,如果你想它只是爲a

print(a, digits=15)