2016-01-23 37 views
0

我想根据它们连接的节点的值(在R igraph中)设置图形中某个范围边缘的边缘属性。从igraph.es(边缘序列)到R中的节点

当我取回我的图形对象有一定优势,我担任与边序列对象:

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]符号的节点,检查我的属性感兴趣并最终设置边缘属性。

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

我知道%--%符号,并在某些情况下,它允许我基于节点属性边缘过滤提前解决了我的问题。但在其他许多情况下是符号并不能帮助(如果边缘属性值与节点的属性更复杂的关系),我不知道是否有从一个边缘序列进入到相应的节点对一个更一般的方式。

回答

2

可以使用ends功能才能到顶点:

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

你知道,如果在Python的igraph的任何等效功能? – sera

+0

@sera您不需要Python中的函数。您可以轻松使用'Edge'类的'source'和'target'属性:http://igraph.org/python/doc/igraph.Edge-class.html – retrography

+1

谢谢。我猜如果我使用ends = [e.tuple for e in g.es],我会得到相同的结果吗? – sera