R中vector的最大长度

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

如果您愿意使用R的开发版本,则可以为此function提供实验支持。 从http://stat.ethz.ch/R-manual/R-devel/doc/html/NEWS.html

长期的vector

对于在64位平台上超过2 ^ 31 – 1个元素的向量,有一些支持的开始。 这适用于原始,逻辑,整数,双精度,复数和字符向量以及列表。 (字符向量的元素保持限制为2 ^ 31 – 1个字节。)

所有方面都是实验性的。

目前可以用这种vector做些什么,而且大多数操作都会返回错误“尚未支持的长vector”。 他们可以被序列化和反序列化,强制,相同()和object.size()的工作和手段可以被计算出来。 它们的长度可以通过xlength()来获取和设置:长向量的调用长度()会抛出错误。

索引的大部分方面都是可用的。 通常可以使用双值索引来访问超过2 ^ 31 – 1的元素。

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

如果你去http://developer.r-project.org/R_svnlog_2011 (和http://developer.r-project.org/R_svnlog_2012 )search“长向量”,你可以感觉到工作是继续。

以下是一些将补充本答案的细节。 这些限制似乎是从用于构buildR的低级编程语言inheritance而来,特别是(显然)FORTRAN代码。 所以,很明显,将R转换到可以充分利用64位寻址系统的地位将成为一个重要的项目。

从R-admin手册 :

即使在64位版本的R上,R对象的大小也是有限制的(参见帮助(“内存限制”),其中一些源于使用32位整数(特别是在FORTRAN代码中)的R,vector的最大长度(元素数量)为2 ^ 31-1,约20亿,而在64位构build中,分配的内存块的大小被限制为2 ^ 34-1个字节(8GB ),预计这些将最终提高*但8GB对象的需求是(当这是写在2011年)例外。

(在手册中还有一个歪曲的脚注,我在那里写了* ,注意到“自2005年以来,这个评论已经在手册中了”。:)