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

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

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

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

Спасибо

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

 Tommy03 апр. 2012 г., 00:03
Можете ли вы уточнитькак вы создаете матрицу?
 Peter Flom03 апр. 2012 г., 23:31
@ Томми, это оказалось ошибкой с моей стороны

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

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

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

Решение Вопроса

около 1 миллиарда строк / 2 столбцов.

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

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

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

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

 Tommy03 апр. 2012 г., 00:01
@James - правда. Размер строк увеличивается на 8 для каждых 8 символов. Такobject.size('abcdefgh') == 104 (на 64-битных системах)
 James02 апр. 2012 г., 23:58
Есть некоторые издержки на вектор, на пределеobject.size(character(n))/n показывает, что символы 8 байтов.

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