我正在使用igraph做一些网络分析。作为其中的一部分,我必须创建一个矩阵,其中包含2列和链接的行数。我有一个大型网络(数百万个链接),并且在运行3小时后创建此矩阵不起作用(没有错误,没有结果,并且显示“没有响应”)。
这种字符矩阵的最大大小是多少?运行需要多长时间?
我在运行速度为2.67 Ghz的4 GB内存的Windows 7计算机上运行64位R 2.14.1
感谢
ADDED 感谢您的快速回复。这使我肯定它不是矩阵的大小;事实证明,我正在使用另一个矩阵的列来创建该矩阵。
答案 0 :(得分:12)
R中向量的理论极限是2147483647个元素。所以这大约是10亿行/ 2列。
...但是这些数据量不适合4 GB的内存......尤其是字符向量中没有字符串。每个字符串至少为96个字节(object.size('a') == 96
),矩阵中的每个元素都是这样一个字符串的指针(8个字节)(尽管每个唯一字符串只有一个实例)。
通常情况下,机器开始使用虚拟内存并开始交换。大量交换通常会杀死本世纪所有希望 - 尤其是在Windows上。
但是如果你正在使用一个包(igraph?)并且你要求它生成矩阵,它可能会做很多内部工作并创建许多辅助对象。因此,即使您没有接近单个结果矩阵的内存限制,用于生成它的算法也会耗尽内存。它也可能是非线性的(二次的或更糟的),这将再次扼杀本世纪所有希望......
调查的一个好方法可能是将它计时在一个小图表上(例如使用system.time
),并在将图表大小加倍时再次计算。然后你可以看到时间是线性的还是二次的,你可以估计完成大图所需的时间。如果预测说一周,那么你知道; - )
答案 1 :(得分:2)
R矩阵可以用单索引表示法进行寻址,因为它们实际上是具有长度为2的dim属性的向量,并且即使您使用的是64位版本,R向量也会通过带符号的32位整数进行寻址。因此,2列矩阵最多可以有2^30-1
行。
data.frame
允许您使用2^31-1
行和列。