【问题标题】:Graph intersection using igraph in R在 R 中使用 igraph 绘制交集
【发布时间】:2014-12-12 13:38:05
【问题描述】:

所以,我正在使用 igraph 库计算 R 中图形的交集。我将命令用作: str(g1 %s% g2 %s% g3).

图表统计如下:

g1
IGRAPH UN-- 68 41 -- 
+ attr: name (v/c)

g2
IGRAPH UN-- 149 94 -- 
+ attr: name (v/c)

g3
IGRAPH UN-- 164 106 -- 
+ attr: name (v/c)

现在,我将这三个图的交集计算为:

temp <- str(g1 %s% g2 %s% g3)

当我看到temp

IGRAPH UN-- 335 0 -- 
+ attr: name (v/c)

这怎么可能?当我计算公共元素时,相交图中的最终顶点怎么可能超过单个元素?

【问题讨论】:

    标签: r igraph


    【解决方案1】:

    你可以只使用keep.all.vertices参数到graph.intersection(),见http://igraph.org/r/doc/graph.intersection.html如果你使用这个参数,你需要直接调用graph.intersection(),而不是使用中缀运算符,这样你就可以通过额外的论点。使用其他答案中的示例:

    library(igraph)
    g1 <- graph.formula(A -- B -- C -- D)
    g2 <- graph.formula(C -- E -- D -- C)
    g <- graph.intersection(g1, g2, keep.all.vertices = FALSE)
    str(g)
    #> IGRAPH UN-- 2 1 -- 
    #> + attr: name (v/c)
    #> + edges (vertex names):
    #> [1] C--D
    

    您可以将两个以上的图表传递给graph.intersection()

    【讨论】:

    • 非常感谢!太好了。 :)
    【解决方案2】:

    试试这个例子:g1 有 4 个顶点(A、B、C 和 D)和 3 条边,g2 有 3 个顶点(C、D 和 E)和 3 条边。

    require(igraph)
    g1 <- graph.formula(A -- B -- C -- D)
    g2 <- graph.formula(C -- E -- D -- C)
    g <- str(g1 %s% g2)
    

    在相交处(g),则有 5 个顶点(A、B、C、D 和 E),唯一的公共边在 C 和 D 之间。

    g
    # IGRAPH UN-- 5 1 -- 
    # + attr: name (v/c)
    

    解释是,为了计算 2 个或更多图的“交集”,您需要处理两组(或更多)顶点的并集。

    我没有任何好的解决方案来获得“公共顶点上的相交图”。但我可以提出一些可能很肮脏的建议。希望有人会提出一个更清洁的解决方案:

    ids <- which(V(g)$name %in% intersect(V(g1)$name, V(g2)$name))
    g_intersection <- induced.subgraph(g, vids=ids)
    # IGRAPH UN-- 2 1 -- 
    # + attr: name (v/c)
    

    【讨论】:

    • 您的解决方案运行良好。谢谢您的帮助。但是,我仍然有一个疑问。我查阅了 igraph 库手册,那里写道,intersection 函数仅查找两个图中都存在的边。那么,为什么当我们直接使用函数str 时,它会产生不正确的结果。您能否详细说明您提到sets of vertices的部分。
    • 另外,如何将它扩展到三个图?我应该先在前两个图上运行您的代码,然后再为第三个图运行,还是也可以直接一步完成?谢谢!
    • 更干净的解决方案是@Gabor Csardi自己提出的;)
    猜你喜欢
    • 2016-04-04
    • 2014-04-07
    • 1970-01-01
    • 2023-03-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多