Подтвердить что ты не робот

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

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

4b9b3361

Ответ 1

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

ДЛИННЫЕ ВЕКТОРЫ

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

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

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

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

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

Если вы перейдете к http://developer.r-project.org/R_svnlog_2011http://developer.r-project.org/R_svnlog_2012) и найдите "длинные векторы" "вы можете почувствовать работу, которая продолжается.

Ответ 2

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

Из руководства R-admin:

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

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