максимальный размер матрицы в R - PullRequest
5 голосов
/ 03 апреля 2012

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

Что такоемаксимальный размер такой символьной матрицы?Сколько времени занимает запуск?

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

спасибо

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

Ответы [ 2 ]

12 голосов
/ 03 апреля 2012

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

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

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

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

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

2 голосов
/ 03 апреля 2012

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...