R中向量的最大长度

时间:2012-05-17 17:50:10

标签: r

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

2 个答案:

答案 0 :(得分:24)

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

  

长传

     

对载体的支持开始时间超过了   64位平台上的2 ^ 31 - 1个元素。这适用于原始,逻辑,整数,   双精度,复数和特征向量,以及列表。 (要点   字符向量仍然限制在2 ^ 31 - 1个字节。)

     

目前所有方面都是实验性的。

     

目前这些载体可以做些什么有限,   并且大多数操作将返回错误'不支持的长向量   然而'。它们可以序列化和反序列化,强制化,相同()   和object.size()工作和手段可以计算。他们的长度可以   通过xlength()获取和设置:在长向量上调用length()将抛出   错误。

     

索引的大多数方面都可用。一般是双值的   index可用于访问超过2 ^ 31 - 1的元素。

有关详细信息,请参阅链接。我自己没有尝试过这个,所以我不能评论它是否真的有用。

如果您转到http://developer.r-project.org/R_svnlog_2011(和http://developer.r-project.org/R_svnlog_2012)并搜索“长向量”,您就可以了解正在进行的工作。

答案 1 :(得分: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年写的时候)特殊。

(手册中还有一个歪歪扭势的脚注,我放了一个*,注意到“这个评论自2005年以来一直在手册中。”。)