2013-10-10 60 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)