Combine two graphs and add edge weights in R igraph

别说谁变了你拦得住时间么 提交于 2019-12-10 17:39:03

问题


I'm trying to combine two graphs with the same nodes, but such that the new graph edge weight is the sum of the two original graphs (but of course want the solution to extend to N graphs):

g1 <- graph.empty(directed=FALSE) + vertices(letters[1:2])
g1 <- g1 + edge("a", "b")
E(g1)$weight <- 1

g2 <- graph.empty(directed=FALSE) + vertices(letters[1:2])
g2 <- g2 + edge("a", "b")

E(g2)$weight <- 2

g3 <- g1 %u% g2

E(g3)$weight_1 #this is 1
E(g3)$weight_2 #this is 2

But i want E(g3)$weight to be 3.

Is there a more elegant way of doing this than summing across the edge weights _1, _2, ... afterwards? Something along the lines of simplify/contract?


回答1:


Just add weight_1 and weight_2. igraph does not currently have a way to combine vertex/edge attributes from multiple graphs, except by hand. This is usually not a big issue, because it is just an extra line of code (per attribute). Well, three lines if you want to remove the _1, _2 attributes. So all you need to do is:

E(g3)$weight <- E(g3)$weight_1 + E(g3)$weight_2

and potentially

g3 <- remove.edge.attribute(g3, "weight_1")
g3 <- remove.edge.attribute(g3, "weight_2")

I created an issue for this in the igraph issue tracker, but don't expect to work on it any time soon: https://github.com/igraph/igraph/issues/800



来源:https://stackoverflow.com/questions/27762359/combine-two-graphs-and-add-edge-weights-in-r-igraph

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!