2

我们可以使用 R 在没有循环的情况下找到图中所有顶点对的公共邻居吗?

例如,我们使用以下命令在 TD1 图中查找节点 1 和 2 的公共邻居:

intersect(neighborhood(graph=TD1,order=1,nodes=1),neighborhood(graph=TD1,order=1,nodes=2))

但是我需要找到每对顶点的共同邻居,并且因为图很大,所以使用循环非常耗时!这个程序有功能吗?

4

1 回答 1

2

我们可以使用邻接图来获得一个显示连接的稀疏矩阵。然后,将其转换为 data.table 以供邻居加入。然后,通过顶点对连接相邻顶点,其中顶点不相同并且顶点对不重复

library(data.table)
library(igraph)
numVer <- 5
g <- erdos.renyi.game(numVer, 1)
plot(g)

adjSM <- as(get.adjacency(g), "dgTMatrix")
adjDT <- data.table(V1=adjSM@i+1, V2=adjSM@j+1)
res <- adjDT[adjDT, nomatch=0, on="V2", allow.cartesian=TRUE
             ][V1 < i.V1, .(Neighbours=paste(V2, collapse=",")),
               by=c("V1","i.V1")][order(V1)]
res
于 2016-04-23T06:08:32.600 回答