Максимальная длина для вектора в R

Согласно R '' ограничениям памяти '' документация, невозможно выделить вектор длиной более 2 ^ 31-1. Это связано с тем, что целое число, используемое в качестве индекса, может использовать только 31 бит (один бит для знака). Но в 64-битной системе я должен иметь возможность выделять более длинные векторы. Почему R накладывает такую же максимальную длину на 64-битные системы? Есть ли способ обойти ограничение?

 Joshua Ulrich30 дек. 2012 г., 19:15
Отметьте, что этот предел был удален в R-3.0.0.

Ответы на вопрос(2)

Экспериментальный поддержка этой функции. Отhttp: //stat.ethz.ch/R-manual/R-devel/doc/html/NEWS.htm :

ДОЛГОЕ ВЕКТОРЫ

На 64-битных платформах есть начала поддержки векторов длиннее 2 ^ 31 - 1 элементов. Это относится к необработанным, логическим, целочисленным, двойным, сложным и символьным векторам, а также к спискам. (Элементы символьных векторов остаются ограниченными 2 ^ 31 - 1 байтами.)

Все аспекты в настоящее время являются экспериментальными.

То, что может быть сделано с такими векторами, в настоящее время несколько ограничено, и большинство операций будет возвращать ошибку «длинные векторы еще не поддерживаются». Они могут быть сериализованы и не сериализованы, могут быть вычислены приведение к типу принудительное приведение, тождественное () и объектное (). Их длины можно получить и установить с помощью xlength (): вызов length () для длинного вектора выдаст ошибку.

Большинство аспектов индексации доступны. Как правило, для доступа к элементам, выходящим за пределы 2 ^ 31 - 1, могут использоваться двухзначные индексы.

Пройдите по ссылке, чтобы узнать больше. Я вообще не экспериментировал с этим, поэтому не могу комментировать, является ли это практически полезным или нет.

Если ты идешь вhttp: //developer.r-project.org/R_svnlog_201 (а такжеhttp: //developer.r-project.org/R_svnlog_201) и поиск «длинных векторов» позволяет понять, что происходит.

 Josh O'Brien17 мая 2012 г., 20:54
Отличное предложение для сканирования через журнал SVN. Видя, что по сути это «Рипли, Рипли, Рипли, ...», кто выполняет работу, напоминает мне оэта почт со дня на день.

которые дополнят ответ Бена. Кажется, что ограничения унаследованы от языков программирования более низкого уровня, используемых для сборки R, особенно (по-видимому) кода FORTRAN. Таким образом, очевидно, что переход на R с тем, чтобы он мог в полной мере использовать преимущества 64-битных систем адресации, станет крупным проектом.

От R-admin инструкция:

Даже в 64-битных сборках R существуют ограничения на размер объектов R (см. Справку («Ограничения памяти»), некоторые из которых проистекают из использования 32-битных целых чисел (особенно в коде FORTRAN). сборок R, максимальная длина (число элементов) вектора составляет 2 ^ 31-1, около 2 миллиардов, а на 64-разрядных сборках размер выделенного блока памяти ограничен 2 ^ 34-1 байтами ( 8 ГБ). Ожидается, что они будут в конечном итоге подняты *, но потребность в объектах 8 ГБ является (когда это было написано в 2011 году) исключительной.

(В руководстве также есть кривая сноска, где я поставил*, отмечая, что «этот комментарий был в руководстве с 2005 года». :)

Ваш ответ на вопрос