Максимальный размер матрицы в R

Я использую igraph для анализа сети. Как часть этого, я должен создать матрицу из 2 столбцов и столько строк, сколько есть ссылок. У меня большая сеть (несколько миллионов ссылок), и создание этой матрицы не сработало после 3 часов работы (без ошибок, просто без результата, и показывает "не отвечает").

Каков максимальный размер такой символьной матрицы? Как долго длится бег?

Я использую 64-битную версию R 2.14.1 на компьютере под управлением Windows 7 с 4 ГБ памяти, работающей на частоте 2,67 ГГц

Спасибо

ДОБАВЛЕНО Спасибо за быстрые ответы. Это сделало меня уверенным, что это был не размер матрицы; это оказалось ошибкой, в которой столбцы другой матрицы я использовал для создания этой матрицы.

2 ответа

Решение

Теоретический предел вектора в R составляет 2147483647 элементов. Это около 1 миллиарда строк / 2 столбцов.

... но этот объем данных не помещается в 4 ГБ памяти... И особенно не в строках в символьном векторе. Каждая строка не менее 96 байт (object.size('a') == 96), и каждый элемент в вашей матрице будет указателем (8 байт) на такую ​​строку (хотя есть только один экземпляр каждой уникальной строки).

Поэтому обычно происходит то, что машина начинает использовать виртуальную память и начинает подкачку. Тяжелая замена обычно убивает все надежды когда-либо закончить в этом столетии - особенно на Windows.

Но если вы используете пакет (igraph?) И просите его создать матрицу, он, вероятно, выполняет много внутренней работы и создает множество вспомогательных объектов. Таким образом, даже если вы не приблизились к пределу памяти для матрицы одного результата, алгоритм, используемый для ее создания, может исчерпать память. Он также может быть нелинейным (квадратичным или хуже) во времени, что снова убьет всякую надежду когда-либо закончить в этом столетии...

Хороший способ исследовать это можно рассчитать на небольшом графике (например, используя system.time) и еще раз при удвоении размера графика пару раз. Затем вы можете увидеть, является ли время линейным или квадратичным, и вы можете оценить, сколько времени займет заполнение вашего большого графика. Если прогноз говорит неделю, ну тогда вы знаете;-)

R матрицы могут быть адресованы в единой индексной нотации, так как они на самом деле являются вектором с атрибутом dim длины 2, а R-векторы адресуются 32-разрядным целым числом со знаком, даже если вы используете 64-разрядную версию. Таким образом, матрица из 2 столбцов может иметь максимум 2^30-1 строк.

data.frame позволит вам использовать 2^31-1 строки и столбцы.

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