"Слишком много индексов" проблема большой длины вектора матрицы в 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.
Лучшее, что вы можете сделать - это разделить и победить, то есть разделить вашу матрицу и сделать столько шагов (больше), сколько необходимо для достижения вашей цели.