2012-02-17 72 views
0

我发现一个大图的cocitation矩阵(200K节点):出的R中的内存的igraph

cocitation(graph) 

那么问题出现

Error in cocitation(graph):At vector.pmt:125 : cannot init vector, Out of memory 

我该如何解决这个问题?

非常感谢您

+2

创建一个200,000×200,000的矩阵是一个相当大的任务。尝试获取关于您正在查看的顶点的共同信息(即cocitation(graph,v = 1) – 2012-02-17 06:12:02

+3

)虽然从未来访问此页面的用户将会像“只有200k个节点,我可以在我的烤面包机上运行”。 – 2012-02-17 08:10:53

回答

2

一般解决了内存问题是

  1. 一个做你的代码的东西聪明,所以它不太占用大量内存。

  2. 购买更多的RAM(通常比花费的时间更便宜)。

  3. 使用并行 包之一在多台机器之间传播负载。使用bigmemory包装。

  4. 使用数据集的子集。

我同意伊恩院士最后的选择可能是你最好的选择。

3

问题是,igraph试图分配一个200K x 200K矩阵来存储结果。尽管矩阵中的大多数元素可能都是零,但igraph没有单独的稀疏矩阵数据类型,所以它必须分配一大块内存来容纳所有4 x 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 
}