我正在尝试将两个图与相同的节点组合在一起,但是这样新的图边缘权重就是两个原始图的总和(但当然希望解决方案扩展到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,...之后求和之外,还有其他更优雅的方法吗?简化/契约(Contract)方面的东西吗?

最佳答案

只需添加weight_1weight_2即可。 igraph目前尚无法通过手动方式组合多个图的顶点/边属性。这通常不是什么大问题,因为它只是一行额外的代码(每个属性)。好吧,如果要删除_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

10-08 17:17