2

我是 R 和 igraph 的新手,我想知道是否有人可以帮助我解决以下问题。

我想找到图中两个顶点之间的边权重。我的图形结构由正常的自我(node1)、alter(node2)和它们之间的边的权重定义。

我知道我可以使用E(igraph_friendship) [ from(5) ]$weight 获得源自节点号 5 的边列表中每个边的权重 并且我可以找到每个边的权重使用E(igraph_friendship) [ to(10) ]$weight到节点 10 结束的边列表

但是,如果我只想找到仅连接节点 5 和节点 10 的边的权重怎么办?

或者,如果我可以在所有边的列表中获得连接节点 5 和 10 的边的标识符E(igraph_friendship),那也可以。

非常感谢您的帮助,我一直在寻找它,非常感谢您的帮助!

4

2 回答 2

0

这在 igraph 0.6 及更高版本中实际上非常简单,因为您可以将图形视为邻接矩阵(或在您的情况下为加权邻接矩阵):

library(igraph)
g <- graph.ring(10)
g[1,2]
# [1] 1
E(g)$weight <- runif(ecount(g))
g[1,2]
# [1] 0.8115639

如果你想为整个矩阵做这个,那么你可以简单地做

g[]

或者,如果您不想要稀疏矩阵,那么

g[sparse=FALSE]

请查看?"[.igraph"更多。

于 2012-10-19T01:26:22.380 回答
0

Gabor 对邻接矩阵的使用有所帮助。然而,我花了一段时间才弄清楚如何将我的带有权重的边缘列表放入邻接矩阵中。我尝试使用 graph.data.frame 以通常的方式执行此操作,但是当我尝试将 igraph 对象转换为邻接矩阵时会出现奇怪的错误(错误:.M.kind(x) 中的错误:尚未为矩阵实现w/ typeof 字符)。这篇文章帮助解决了这个问题:https ://sites.google.com/site/daishizuka/toolkits/sna/weighted-edgelists 。

但是,我从 R 帮助电子邮件列表中发现最有效的是直接在 igraph 对象上的这个简单运算符:E(g)[5 %--% 10]$weight。有关详细信息,请参阅http://igraph.sourceforge.net/doc/R/iterators.html

于 2012-10-19T18:46:17.137 回答