2011-07-12 58 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)