为了账号安全,请及时绑定邮箱和手机立即绑定

R中的long / bigint / decimal等效数据类型

R中的long / bigint / decimal等效数据类型

慕雪6442864 2019-09-03 16:48:24
我们有什么数据类型选择来处理R中的大数?默认情况下,整数的大小似乎是32位,因此来自sql server的bigint数字以及从python通过rpy2传递的任何大数字都会被破坏。> 123456789123[1] 123456789123> 1234567891234[1] 1.234568e+12当使用RODBC读取bigint值123456789123456789时,它返回为123456789123456784(参见最后一位数字),并且通过RJSONIO反序列化时的相同数字将返回-1395630315L(这似乎是RJSONIO的附加错误/限制)。> fromJSON('[1234567891]')[1] 1234567891> fromJSON('[12345678912]')[1] -539222976实际上,我确实需要能够处理来自JSON的大量数据,因此在RJSONIO的限制下,除了找到更好的JSON库(现在看起来像一个非选项)之外,我可能没有解决方法。我想听听专家们对此以及一般情况的看法。
查看完整描述

3 回答

?
千万里不及你

TA贡献1784条经验 获得超9个赞

见help(integer):


 Note that on almost all implementations of R the range of

 representable integers is restricted to about +/-2*10^9: ‘double’s

 can hold much larger integers exactly.

所以我建议使用numeric(即'double') - 一个双精度数字。


查看完整回答
反对 回复 2019-09-03
?
大话西游666

TA贡献1817条经验 获得超14个赞

我理解你的问题与我之前发布的两个人有点不同。


如果R的最大默认值对你来说不够大,你有几个选择(免责声明:我使用了下面提到的每个库,但不是通过R绑定,而是通过其他语言绑定或本机库)


的大人国包:使用自然日志存储值; (比如Rmpfr,使用R的新类结构实现)。我总是对那些工作需要这种规模的人印象深刻。


library(Brobdingnag)


googol <- as.brob(1e100)   

的GMP包,R绑定古老的GMP(GNU多精度库)。这必须追溯到20年,因为我在大学使用它。这个图书馆的座右铭是“算术无限制”,这是一个可靠的主张 - 整数,有理数,浮点数等等,直到你盒子上RAM的极限。


library(gmp)


x = as.bigq(8000, 21)

该Rmpfr包,R绑定哪个接口都GMP(上图)和MPFR,(MPFR又一个当代实施GMP的我已经使用了Python绑定(“bigfloat”),并强烈推荐它,这可能是你最好的。考虑到它的范围,三者的选择,因为它似乎是最积极维护的,并且最终给出了最全面的文档。


注意:要使用后两者中的任何一个,您需要安装本机库,GMP和MPFR。


查看完整回答
反对 回复 2019-09-03
  • 3 回答
  • 0 关注
  • 869 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号