两个顶点之间的igraph边缘

时间:2012-10-18 21:52:06

标签: r graph igraph social-graph sna

我是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),那也可以。

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

2 个答案:

答案 0 :(得分: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"

答案 1 :(得分:0)

Gabor对邻接矩阵的使用有所帮助。但是,我花了一些时间来弄清楚如何将带有权重的边缘列表放入邻接矩阵中。我试图用通常的方式使用graph.data.frame但是当我尝试将igraph对象转换为邻接矩阵时会出现一个奇怪的错误(错误:.M.kind(x)中的错误:尚未实现矩阵w / typeof character)。这篇文章有助于解决问题: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