"Слишком много индексов" проблема большой длины вектора матрицы в R

Привет и заранее спасибо. Я использую Rx64 версии 3.1.2 на Windows Server и получаю большую матрицу на основе файла, сгенерированную из пакета bigmemory что я пытаюсь использовать в задаче линейного программирования. Матрица состоит из 7062 строк и 364520 столбцов, что в общей сложности составляет 2574240240 записей (целых чисел).

Когда я запускаю строку для линейной программы, я получаю следующую ошибку:

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

Это число, 2147483647, из того, что я прочитал, является максимальным количеством записей R, которое допускается для любого объекта даже в 64-битных процессах. Я читал здесь, что я могу использовать "экспериментальную версию" 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"

2 ответа

Решение

Было бы лучше, если бы вы также предоставили "строку для линейной программы", но мой комментарий слишком длинный, чтобы поставить его выше.

@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.

Лучшее, что вы можете сделать - это разделить и победить, то есть разделить вашу матрицу и сделать столько шагов (больше), сколько необходимо для достижения вашей цели.

Другие вопросы по тегам