【问题标题】:How do I find the edges of a vertex using igraph and R?如何使用 igraph 和 R 找到顶点的边缘?
【发布时间】:2011-03-19 08:28:40
【问题描述】:

假设我有这个示例图,我想找到连接到顶点“a”的边

 d <- data.frame(p1=c('a', 'a', 'a', 'b', 'b', 'b', 'c', 'c', 'd'),
                 p2=c('b', 'c', 'd', 'c', 'd', 'e', 'd', 'e', 'e'))

library(igraph)
g <- graph.data.frame(d, directed=FALSE)
print(g, e=TRUE, v=TRUE)

我可以很容易地找到一个顶点:

 V(g)[V(g)$name == 'a' ]

但我需要引用连接到顶点“a”的所有边。

【问题讨论】:

    标签: r igraph


    【解决方案1】:

    请参阅igraph iterators 上的文档;特别是 from() 和 to() 函数。

    在您的示例中,“a”是 V(g)[0],因此要找到连接到“a”的所有边:

    E(g) [ from(0) ]
    

    结果:

    [0] b -- a
    [1] c -- a
    [2] d -- a
    

    【讨论】:

    • Python-igraph 用户注意事项:与此解决方案等效的是使用 EdgeSeq 的 select 函数,但正如 bug report 中所述,它目前存在错误。获取顶点 X 的边 ID 的建议解决方法是使用 g.es[g.incident(x)]
    • fromtoadj 迭代器对于无向图的行为相同,但对于有向图,adj 迭代器需要获取附加到顶点。对于有向图,from 仅返回从提供的顶点开始的边; to 仅返回在提供的顶点处结束的边。对于有向图和无向图,adj 将返回与顶点关联的所有边。
    【解决方案2】:

    如果不知道顶点的索引,可以在使用 from() 函数之前使用 match() 找到它。

    idx <- match("a", V(g)$name)
    E(g) [ from(idx) ]
    

    【讨论】:

    • 更简单:E(g) [ to("a") ]
    【解决方案3】:

    找到了一个结合上述两种努力的更简单的版本,它也可能有用。

    E(g)[from(V(g)["name"])]
    

    【讨论】:

    • 这给了我一个索引,但不是 (Source_Node -> Destination_Node) 元组中的实际名称(我正在使用有向图)
    • 我需要更多帮助来解决您所看到的问题。我似乎能够从节点中提取/提取节点。需要(igraph)g1 E(g1)[to(V(g1)[2])] + 74d9064 的 1/3 边:[1] 1->2 > E(g1)[from(V(g1)[2 ])] + 74d9064 的 1/3 边:[1] 2->3
    • 谢谢,今天或后天有空再试试。
    【解决方案4】:

    我使用这个函数来获取所有节点的边数:

    sapply(V(g)$name, function(x) length(E(g)[from(V(g)[x])]))
    

    【讨论】:

    • 当您可以使用degree(g) 时,您应该使用。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-29
    • 2020-08-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多