igraph 中的二度连接

Posted

技术标签:

【中文标题】igraph 中的二度连接【英文标题】:2nd Degree Connections in igraph 【发布时间】:2011-11-04 15:26:02 【问题描述】:

我认为这可以正常工作,但我希望模仿类似于 Facebook 的 Friend 建议的东西。简单地说,我正在寻找二级联系(与您没有联系的朋友的朋友)。我确实希望将其保留为有向图并确定 2 度向外连接(您的朋友连接的人)。

我相信我的虚拟代码可以实现这一点,但由于引用是在索引上而不是顶点标签上,我希望你能帮助我修改代码以返回可用的名称。

### create some fake data
library(igraph)

from <- sample(LETTERS, 50, replace=T)
to <- sample(LETTERS, 50, replace=T)
rel <- data.frame(from, to)
head(rel)    

### lets plot the data
g <- graph.data.frame(rel)
summary(g)
plot(g, vertex.label=LETTERS, edge.arrow.size=.1)


## find the 2nd degree connections
d1 <- unlist(neighborhood(g, 1, nodes="F", mode="out"))
d2 <- unlist(neighborhood(g, 2, nodes="F", mode="out"))
d1;d2;
setdiff(d2,d1)

返回

> setdiff(d2,d1)
[1] 13

您能提供的任何帮助都会很棒。显然我希望留在 R 内。

【问题讨论】:

【参考方案1】:

您可以像这样对图形顶点进行索引:

> V(g)[setdiff(d2,d1)]
Vertex sequence:
[1] "B" "W" "G"

还可以查看?V,了解通过直接索引获取此类信息的方法。

【讨论】:

【参考方案2】:

您可以使用图 $g$ 的邻接矩阵 $G$(这里没有乳胶?)。邻接矩阵的属性之一是它的 n 次方为您提供了 $n$-walk 的数量(长度为 n 的路径)。

G <- get.adjacency(g)

G2 <- G %*% G        # G2 contains 2-walks
diag(G2) <- 0        # take out loops
G2[G2!=0] <- 1 # normalize G2, not interested in multiplicity of walks

g2 <- graph.adjacency(G2)

图形g2 中的一条边表示“朋友的朋友”关系。

【讨论】:

一个很好的解决方案。如果我乘以 G2 %*% G2 会怎样?我能获得 3 次步行吗?

以上是关于igraph 中的二度连接的主要内容,如果未能解决你的问题,请参考以下文章

如何在 R 中删除 igraph 中的节点?

检索 Igraph 中所有节点的一阶连接和二阶连接

如何将 igraph 拆分为连接的子图?

使用igraph查找连接到顶点的所有顶点?

如何将函数应用于图形/网络中的每个连接组件?

Atom插件主题推荐