2013-10-10 226 views
3

我最終還是希望用2個頂點移除連接組件(即兩個頂點具有它們之間的邊緣),以獲得我的圖的一個子集 你可以改寫這個問題爲:R和IGRAPH邊緣

given an edge e = (s, d) if degree(s) == degree(d) == 1 then delete edge e 

我正在使用R和Igraph,我該怎麼做?我知道我可以通過執行以下操作來刪除所有零度節點:

g = some_graph() 
ldegs <- V(g)[degree(g) < 1] 
g = delete.vertices(g, ldegs) 

在此先感謝!

回答

5

我不認爲這太難,你只需找到程度爲== 1的節點列表,找到它們的鄰居,並且如果有任何鄰居在列表中,它們就是要刪除的那些:

library(igraph) 
g = erdos.renyi.game(100, 0.02) 
ones = V(g)[degree(g) == 1] 
one_ns = sapply(ones, neighbors, graph=g) 
# If any of the neighbours are in ones, we 
# can delete these 
to_delete = one_ns[one_ns %in% ones] 
# Visualize: 
plot(g, mark.groups=to_delete)