我有一個大型的igraph對象,幾乎1M節點和1.5M的邊緣。經過一段時間的研究,我找不到一個對節點的鄰居屬性求和的過程,在這種情況下,它是一個二進制的屬性。目前,我找到的最佳解決方案如下:快速的方式來總結在一個大圖中的鄰居屬性R
V(g)$sum = sapply(ego(g,1,V(g),mode = 'all',mindist = 1), function(v) sum(V(G)[v]$attr))
但是,在12小時後仍然嘎吱嘎吱。
有什麼建議嗎?
更新1:讓我們考慮下面的圖
library(igraph)
G <- graph.formula(1-+2,1-+3,2-+4,2-+5,3-+6,5-+7,7-+8,8-+9,9+-7, 9-+10,
6-+9,1-+5,3-+9,10-+11,11-+12,11-+5,12-+4,4-+10,10-+4,11-+10)
V(G)$attr = c(1,1,0,0,1,0,1,0,1,0,1,0)
plot(G, vertex.label.color = "white", edge.width=E(G)$weight, layout = layout.circle(G))
和期望的結果應該是這樣的......
sapply(ego(G,1,V(G),mode = 'all',mindist = 1), function(v) sum(V(G)[v]$attr))
[1] 2 2 2 1 4 1 2 2 1 2 1 1
@陶馬什,我試圖訪問鄰居的功能沒有使用循環,但取而代之的是上述結果我得到了這個...
sapply(neighbors(G,V(G)),function (v) sum(V(G)[v]$attr))
2 3 5
1 0 1
我用這個命令sapply(V(G),function(v)sum(neighbors(G,v,mode ='all')$ attr)),但是沒有顯着改善 – Cristobal
嘗試將所有頂點的屬性預取到變量中(例如'attr < - V(g)$ attr'),然後對該變量進行子集化(即'attr [neighbors(G,v,mode =「all 「)]')。不知道這是否有幫助。 –