首页 文章

R中矩阵的最大大小

提问于
浏览
5

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

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

我在运行速度为2.67 Ghz的4 GB内存的Windows 7计算机上运行64位R 2.14.1

谢谢

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

2 回答

  • 2

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

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

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

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

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

  • 12

    R矩阵可以用单索引表示法进行寻址,因为它们实际上是具有长度为2的dim属性的向量,并且即使您使用的是64位版本,R向量也会通过带符号的32位整数进行寻址 . 因此,2列矩阵最多可以有 2^30-1 行 .

    data.frame 允许您使用 2^31-1 行和列 .

相关问题