我正在使用igraph for R.我的圖基於包含平行邊的邊界列表(多個邊具有相同的源和目標)。我想將這些平行邊緣轉換爲邊緣屬性權重。有沒有一種方法可以做到這一點?R igraph將平行邊轉換爲重量屬性
如果沒有簡單的方法。我如何識別這些平行邊緣?
duplicated(E(net))
不返回單個重複。我想它尋找重複的邊緣ID。
我正在使用igraph for R.我的圖基於包含平行邊的邊界列表(多個邊具有相同的源和目標)。我想將這些平行邊緣轉換爲邊緣屬性權重。有沒有一種方法可以做到這一點?R igraph將平行邊轉換爲重量屬性
如果沒有簡單的方法。我如何識別這些平行邊緣?
duplicated(E(net))
不返回單個重複。我想它尋找重複的邊緣ID。
也可以使用E(graph)$weight <- 1
然後是simplify(graph, edge.attr.comb=list(weight="sum"))
,爲每個邊緣分配權重1,然後在疊加權重時將多個邊緣摺疊爲單個邊緣。
它似乎出口與邊緣平行於在igraph
鄰接矩陣的未加權圖形與邊爲重量的數量,然後可以再次讀取創建權重列表:
library("igraph")
E <- matrix(c(1,1,1,2,2,2),3,2)
G <- graph.edgelist(E)
G2 <- graph.adjacency(get.adjacency(G),weighted=TRUE)
這是非常大圖一個真正有用的解決方案。 – timothyjgraham
如果你想獲得一個圖的平行邊的數量不增加重量屬性的圖表,你可以使用下面的功能:
duplicated <- function(graph){
g_local <- graph
E(g_local)$weight <- 1
g_simp <- simplify(g_local, edge.attr.comb=list(weight="sum"))
w <- E(g_simp)$weight
return(sum(w-1))
}
這個解決方案實際上要好得多,因爲它使用線性空間和時間,而鄰接矩陣解決方案使用二次(以頂點數量)空間和時間。 –
順便說一句。這也消除了循環邊緣,所以如果你不想這樣做,可以使用'remove.loops = FALSE'參數來簡化()'。 –