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

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

2 ответа

Если вы хотите работать с версией разработки R, вы можете получить экспериментальную поддержку этой функции. Из http://stat.ethz.ch/R-manual/R-devel/doc/html/NEWS.html:

Длинные векторы

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

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

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

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

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

Если вы зайдете на http://developer.r-project.org/R_svnlog_2011http://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 года".:)

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