我有一个大型 igraph 对象,几乎有 1M 个节点和 150 万条边。经过一段时间的研究后,我找不到一个对节点的邻居属性求和的过程,在这种情况下,它是一个二进制的。目前,我找到的最佳解决方案如下:
\n\nV(g)$sum = sapply( ego(g,1,V(g),mode = \'all\',mindist = 1), function(v) sum(V(G)[v]$attr) )\n
Run Code Online (Sandbox Code Playgroud)\n\n然而,12 小时后,它仍然嘎吱作响。
\n\n有什么建议么?
\n\n更新 1:让我们考虑下图
\n\nlibrary(igraph)\nG <- graph.formula(1-+2,1-+3,2-+4,2-+5,3-+6,5-+7,7-+8,8-+9,9+-7, 9-+10,\n 6-+9,1-+5,3-+9,10-+11,11-+12,11-+5,12-+4,4-+10,10-+4,11-+10)\nV(G)$attr = c(1,1,0,0,1,0,1,0,1,0,1,0)\nplot(G, vertex.label.color = "white", edge.width=E(G)$weight, layout = layout.circle(G))\n
Run Code Online (Sandbox Code Playgroud)\n\n\n\n而期望的结果应该是这样的......
\n\n sapply( ego(G,1,V(G),mode = \'all\',mindist = 1), function(v) sum(V(G)[v]$attr) )\n [1] 2 2 2 1 4 1 2 2 1 2 1 1\n
Run Code Online (Sandbox Code Playgroud)\n\n@Tam\xc3\xa1s,我尝试在不使用循环的情况下访问邻居函数,但我得到的不是上面描述的结果......
\n\nsapply(neighbors(G,V(G)),function (v) sum(V(G)[v]$attr))\n2 3 5 \n1 0 1 …
Run Code Online (Sandbox Code Playgroud)