2016-04-22 26 views
1

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

例如我们用下面的命令来查找节点1和2的共同的邻居在TD1图:

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

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

回答

0

我们可以使用邻接图来获得显示连接的稀疏矩阵。然后,将其转换为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([email protected]+1, [email protected]+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 
相关问题