合并两个图并在 R igraph 中添加边权重

Combine two graphs and add edge weights in R igraph

我试图合并两个具有相同节点的图,但新的图边权重是两个原始图的总和(但当然希望解决方案扩展到 N 个图):

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

但我希望 E(g3)$weight 为 3。

有没有比之后对边权重 _1、_2...求和更优雅的方法?类似于 simplify/contract?

只需添加 weight_1weight_2。 igraph 目前没有办法将来自多个图形的 vertex/edge 属性组合起来,只能手动组合。这通常不是什么大问题,因为它只是一行额外的代码(每个属性)。好吧,如果要删除 _1_2 属性,则需要三行。所以你需要做的就是:

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

并且可能

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

我在 igraph 问题跟踪器中为此创建了一个问题,但预计不会很快处理它: https://github.com/igraph/igraph/issues/800