我找到了一个大图(200K 节点)的共引矩阵:
cocitation(graph)
然后出现问题
Error in cocitation(graph):At vector.pmt:125 : cannot init vector, Out of memory
我该如何解决这个问题?
非常感谢
问题是 igraph 试图分配一个 200K x 200K 矩阵来存储结果。尽管该矩阵中的大多数元素可能为零,但 igraph 没有单独的稀疏矩阵数据类型,因此它必须分配一块内存来容纳所有 4 x 10 10元素 - 这是行不通的.
由于您很可能一次不需要整个矩阵,并且您对该矩阵的一些一般统计数据感兴趣,因此您可以简单地创建一个从零到顶点数减一的 for 循环(因为 igraph索引从零开始 - 请注意,对于 R 接口,这将在 0.6 中发生变化),并计算同引矩阵的单行:
for (i in 0:vcount(g)-1) {
row <- cocitation(g, v=i)
# Do whatever you want with the row here
}
内存不足问题的一般解决方案是
用你的代码做一些聪明的事情,这样它就不会占用大量内存。
购买更多的 RAM(通常比花时间花时间更便宜)。
使用其中一个并行包在多台机器之间分散负载。
使用bigmemory
包。
使用数据集的子集。
我同意 Ian Fellows 的观点,在这种情况下,最后一个选项可能是你最好的选择。