Максимальная длина для вектора в R
Согласно документации R ‘Memory-limits’, невозможно выделить вектор длиной более 2 ^ 31-1. Это связано с тем, что целое число, используемое в качестве индекса, может использовать только 31 бит (один бит для знака). Но в 64-битной системе я должен иметь возможность выделять более длинные векторы. Почему R налагает такую же максимальную длину на 64-битные системы? Есть ли способ обойти предел?
- Создать таблицу PDF
- promise уже оценивается: рекурсивный аргумент аргумента по умолчанию или более ранние проблемы?
- как вы отправляете письмо от R
- Использование '[' квадратная скобка как функция для lapply в R
- Как определить, есть ли у вас интернет-соединение в R
- В R, как получить имя объекта после его отправки в функцию?
- Тест anova терпит неудачу на lme fits, созданный с помощью вставленной формулы
- Создание системы Prompt / Answer для ввода данных в R
Если вы готовы работать с версией разработки R, вы можете получить экспериментальную поддержку этой функции. С http://stat.ethz.ch/R-manual/R-devel/doc/html/NEWS.html :
ДЛИННЫЕ ВЕКТОРЫ
Начали поддержку векторов длиной более 2 ^ 31 – 1 элементов на 64-битных платформах. Это относится к исходным, логическим, целочисленным, двойным, сложным и символьным векторам, а также спискам. (Элементы векторных векторов остаются ограниченными до 2 ^ 31 – 1 байт.)
Все аспекты в настоящее время являются экспериментальными.
То, что можно сделать с такими векторами, в настоящее время несколько ограничено, и большинство операций вернут ошибки «длинные векторы, которые еще не поддерживаются». Они могут быть сериализованными и неэтериализованными, принудительными, идентичными () и object.size () работами и средствами могут быть вычислены. Их длины можно получить и установить по xlength (): вызов length () на длинном векторе вызовет ошибку.
Большинство аспектов индексации доступны. Обычно двузначные индексы могут использоваться для доступа к элементам за пределами 2 ^ 31 – 1.
Пройдите по ссылке, чтобы узнать больше. Я сам не экспериментировал с этим, поэтому я не могу прокомментировать, насколько это практически полезно или нет.
Если вы перейдете на страницу http://developer.r-project.org/R_svnlog_2011 (и http://developer.r-project.org/R_svnlog_2012 ) и найдите «длинные векторы», вы можете получить представление о работе, которая продолжается.
Вот еще несколько деталей, которые будут дополнять ответ Бена. Ограничения, кажется, унаследованы от языков программирования нижнего уровня, используемых для сборки R, особенно (по-видимому) кода FORTRAN. Итак, очевидно, что переход R, чтобы он мог в полной мере использовать 64-битные системы адресации, станет крупным проектом.
Из руководства R-admin :
Даже в 64-битных строках R существуют ограничения на размер объектов R (см. Справку («Ограничения памяти»), некоторые из которых связаны с использованием 32-битных целых чисел (особенно в коде FORTRAN). из R максимальная длина (количество элементов) вектора равна 2 ^ 31-1, около 2 миллиардов, а на 64-битных строках размер выделенного блока памяти ограничен 2 ^ 34-1 байтами (8 ГБ ). Ожидается, что в конечном итоге они будут подняты *, но потребность в объектах с 8 ГБ (когда это было написано в 2011 году) исключительна.
(В руководстве также есть критическая сноска, где я поставил *
, отметив, что «этот комментарий был в руководстве с 2005 года». 🙂