这个问题在大约6个月前已经在github上被提出,但由于仍未得到解决,我想知道是否有我没有发现的快速修复方法。
我想要根据它们的名称合并两个图。
然而,当我执行union操作时,igraph使用顶点ID而不是名称,所以最终只有三个顶点而不是四个(如果基于名称的话)。我猜想这是因为
有什么办法可以绕过这个问题吗?在igraph的R实现中已经做到了,因此这是可能的。
我想要根据它们的名称合并两个图。
g1 = igraph.Graph()
g2 = igraph.Graph()
# add vertices
g1.add_vertices(["A","B"])
g2.add_vertices(["B","C","D"])
for vertex in g1.vs:
print vertex.index
0
1
for vertex in g2.vs:
print vertex.index
0
1
2
然而,当我执行union操作时,igraph使用顶点ID而不是名称,所以最终只有三个顶点而不是四个(如果基于名称的话)。我猜想这是因为
g2
中的B
在索引0
中,所以它与g1
中的A
合并。同样地,g2
中的C
与g1
中的B
合并。g_union = igraph.Graph.union(g1,g2)
g_union.vs['name'] # of course
KeyError: 'Attribute does not exist'
for vertex in g_union.vs:
print vertex.index
0
1
2
有什么办法可以绕过这个问题吗?在igraph的R实现中已经做到了,因此这是可能的。
getAnywhere(union.igraph)
时,我只得到以下信息:`找到一个与 'union.igraph' 匹配的单个对象 它在以下位置被找到: 来自 igraph 命名空间的 'union' 的已注册的 S3 方法 命名空间:igraph 具有以下值:function (..., byname = "auto") { .igraph.graph.union.or.intersection("R_igraph_union", ..., byname = byname, keep.all.vertices = TRUE) } <environment: namespace:igraph>` - Antoine