首页 文章

R中向量的最大长度

提问于
浏览
31

根据R'Memory-limits'文档,不可能分配长度大于2 ^ 31-1的向量 . 这是因为用作索引的整数只能使用31位(符号一位) . 但是在64位系统上,我应该能够分配更长的向量 . 为什么R在64位系统上施加相同的最大长度?有办法规避限制吗?

2 回答

  • 24

    如果您愿意使用R的开发版本,则可以对此功能提供 experimental 支持 . 来自http://stat.ethz.ch/R-manual/R-devel/doc/html/NEWS.html

    长向量在64位平台上,支持长度超过2 ^ 31 - 1个元素的向量已经开始了 . 这适用于原始,逻辑,整数,双精度,复数和字符向量以及列表 . (字符向量的元素仍然限制在2 ^ 31-1个字节 . )所有方面目前都是实验性的 . 这些向量可以做什么目前有些限制,并且大多数操作将返回错误'尚未支持的长向量' . 它们可以序列化和反序列化,强制,same()和object.size()工作和手段可以计算 . 它们的长度可以通过xlength()获取和设置:在长向量上调用length()会引发错误 . 索引的大多数方面都可用 . 通常,双值指数可用于访问超过2 ^ 31 - 1的元素 .

    请参阅链接查看更多细节 . 我自己没有尝试过这个,所以我不能评论它是否实际有用 .

    如果你去http://developer.r-project.org/R_svnlog_2011(和http://developer.r-project.org/R_svnlog_2012)并搜索"long vectors",你就可以了解正在进行的工作 .

  • 15

    以下是一些补充Ben的答案的细节 . 这些限制似乎是从用于构建R的低级编程语言继承而来的,特别是(显然)FORTRAN代码 . 因此,显然,转换R以便它可以充分利用64位寻址系统将是一个重大项目 .

    来自R-admin manual

    即使在64位版本的R上,R对象的大小也有限制(参见help(“Memory-limits”),其中一些源于使用32位整数(特别是在FORTRAN代码中) . R的构建,向量的最大长度(元素的数量)是2 ^ 31-1,大约20亿,并且在64位构建中,分配的内存块的大小限制为2 ^ 34-1个字节( 8GB) . 预计这些将最终提升*但是8GB对象的需求(在2011年写的时候)是特殊的 .

    (有's also a wry footnote in the manual, where I' ve放了一个 * ,注意到"this comment has been in the manual since 2005" . :)

相关问题