R中矩阵的最大大小

Pet*_*ica 5 memory r

我正在使用igraph做一些网络分析.作为其中的一部分,我必须创建一个矩阵,其中包含2列和链接的行数.我有一个大型网络(几百万个链接),并且在运行3小时后创建此矩阵不起作用(没有错误,没有结果,并且显示"没有响应").

这种字符矩阵的最大大小是多少?运行需要多长时间?

我在Windows 7机器上运行64位R 2.14.1,4 GB内存以2.67 Ghz运行

谢谢

添加感谢您的快速回复.这使我肯定它不是矩阵的大小; 事实证明,我正在使用另一个矩阵的列来创建该矩阵.

Tom*_*mmy 13

R中向量的理论极限是2147483647个元素.所以这大约是10亿行/ 2列.

...但是这些数据量不适合4 GB的内存......尤其是字符向量中没有字符串.每个字符串至少为96个字节(object.size('a') == 96),矩阵中的每个元素都是这样一个字符串的指针(8个字节)(尽管每个唯一字符串只有一个实例).

所以通常会发生的事情是机器开始使用虚拟内存并开始交换.大量交换通常会杀死本世纪所有希望 - 特别是在Windows上.

但是如果你正在使用一个包(igraph?)并且你要求它生成矩阵,它可能会做很多内部工作并创建许多辅助对象.因此,即使您没有接近单个结果矩阵的内存限制,用于生成它的算法也会耗尽内存.它也可能是非线性的(二次或更差),这将再次扼杀本世纪永远完成的所有希望......

一个好的研究方法可能是将它计时在一个小图上(例如使用system.time),再次将图形尺寸加倍几次.然后你可以看到时间是线性的还是二次的,你可以估计完成大图所需的时间.如果预测说一周,那么你知道;-)

  • @James - 真的.每8个字符的字符串大小增加8.所以`object.size('abcdefgh')== 104`(在64位系统上) (2认同)