【问题标题】:"Too many indices" big matrix vector length issue in RR中的“索引过多”大矩阵向量长度问题
【发布时间】:2015-03-03 16:07:02
【问题描述】:

您好,提前感谢您。我在 Windows Server 上使用 Rx64 版本 3.1.2,并有一个从包 bigmemory 生成的文件支持的大矩阵,我试图在线性编程问题中使用它。该矩阵为 7062 行 x 364520 列,共有 2574240240 个条目(整数)。

当我运行线性程序的行时,我得到以下错误:

Error in GetElements.bm(x, i, j) : 
  Too many indices (>2^31-1) for extraction.

我读到的那个数字 2147483647 是 R 允许任何对象的最大条目数,即使在 64 位进程上也是如此。我读过here 我可以使用 R 的“实验版”来解决这个问题,但我希望最近有一个可用的解决方案。我有以下支持输出来确认我的 R 版本:

> version
               _                           
platform       x86_64-w64-mingw32          
arch           x86_64                      
os             mingw32                     
system         x86_64, mingw32             
status                                     
major          3                           
minor          1.2                         
year           2014                        
month          10                          
day            31                          
svn rev        66913                       
language       R                           
version.string R version 3.1.2 (2014-10-31)
nickname       Pumpkin Helmet 

> Sys.getenv("R_ARCH")
[1] "/x64"

【问题讨论】:

  • R 从版本 3 开始支持长向量,所以问题可能出在 bigmemory 上。
  • 错误被硬编码到bigmemory.cpp中:goo.gl/QYQfga
  • @James 所以如果我编辑 bigmemory.cpp 并删除所有提及该硬编码错误的内容,它会解决问题吗?
  • 可能。我建议给包作者发邮件征求他的意见。
  • 好的,谢谢!

标签: r memory 64-bit linear-programming


【解决方案1】:

如果您还可以提供“线性程序行”,那将是最好的,但我的评论太长,无法放在上面。

@James 是正确的,目前 32 位被硬编码为 bigmemory。在查看github 的源代码后,我看到作者确实删除了约束,您可以下载最新版本:

library(devtools)
install_github("kaneplusplus/bigmemory")

如果没有这个限制,我相信您仍然会遇到问题。如果我假设正确,您还使用了补充包bigalgebra。有一种方法可以使用 64 位 bigalgebra,方法是重新安装下载的 tar 球并安装:

REFBLAS=1 R CMD INSTALL bigalgebra_0.8.4.tar.gz

注意 - 目前可用于 64 位的功能非常有限,并且由于当前的变通方法,将比非 64 位版本慢。

我已与原作者联系,我正在更新软件包以使用RcppArmadillo,这将提供更简洁的界面并处理 64 位问题。这目前正在我的 github account 上的 fork 包中进行。

【讨论】:

  • 按照“James”的建议,我联系了 bigmemory 的作者,他确实做出了改变。另外我没有使用 bigalgebra,我实际上使用的是 Rsymphony 包和 Rsymphony_solve_LP 函数。我可以用更多细节编辑我的问题,但这可能值得一个全新的问题......
【解决方案2】:

您能做的最好的事情基本上就是分而治之,这意味着拆分您的矩阵并根据需要执行尽可能多的步骤(更多)以达到您的目标。

【讨论】:

    猜你喜欢
    • 2016-05-18
    • 2014-08-11
    • 2016-04-24
    • 1970-01-01
    • 2017-01-26
    • 2022-11-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多