【问题标题】:From igraph.es (edge sequence) to nodes in R从 igraph.es(边缘序列)到 R 中的节点
【发布时间】:2016-04-30 09:36:41
【问题描述】:

我想根据它们连接的节点的值(当然在 R igraph 中)设置图中某个范围的边的边属性。

当我在我的图形对象中检索某个边时,我会得到一个边序列对象:

E(g)[1]
# + 1/2080 edge (vertex names):
# [1] 35->1
class(E(g)[1])
# [1] "igraph.es"

如何从该边缘序列中获取实际边缘?我发现的唯一相关函数是as_ids

as_ids(E(g)[1])
# [1] "35|1"    

然后我必须拆分字符串以获取节点 ID,将 ID 转换为整数,使用 V(g)[x] 表示法获取节点,检查我感兴趣的属性,最后设置边缘属性。

这是一个不切实际且浪费的过程。有没有更直接的方法来做同样的事情?

我知道%--% 表示法,在某些情况下,它允许我提前根据节点属性过滤边缘,从而解决了我的问题。但在许多其他情况下,这种表示法没有帮助(当边缘属性值与节点属性具有更复杂的关系时),我想知道是否有更通用的方法可以从一个边缘序列到相应的节点对。

【问题讨论】:

    标签: r graph igraph edges


    【解决方案1】:

    您可以使用ends 函数来获取顶点:

    ends(g, E(g)[1])
    

    【讨论】:

    • 不知道python中有没有igraph的等价功能?
    • @sera 你不需要 Python 中的函数。您可以轻松使用Edge 类的sourcetarget 属性:igraph.org/python/doc/igraph.Edge-class.html
    • 谢谢。我想如果我使用 ends = [e.tuple for e in g.es] 我会得到相同的结果吗?
    • @sera 老实说,我不是 Python 用户,所以我不确定。但这看起来是对的。
    • 就是这样!我用 R 来确认。谢谢
    猜你喜欢
    • 1970-01-01
    • 2021-10-26
    • 1970-01-01
    • 1970-01-01
    • 2023-03-20
    • 1970-01-01
    • 2013-05-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多