2014-04-02 87 views
0

我必须使用无向网络g1和g2。这些网络具有相同的顶点,但具有不同的链接集。我想看看g1中包含g2中的多少链接。什么是正确的战略?我在想:如何检查另一个网络中包含多少网络

g1 <- erdos.renyi.game(5, 0.8) 
g2 <- erdos.renyi.game(5, 0.5) 
adj1 <- get.adjacency(g1) 
adj2 <- get.adjacency(g2) 
summ <- adj1+adj2 
similarity <- sum(summ == 2)/2/ecount(g2) 
similarity 

是否有更聪明的方法来完成这个?非常感谢你。

回答

1

graph.intersection给出了包含完全共同边缘的曲线图:

library(igraph) 
set.seed(42 * 42) 
g1 <- erdos.renyi.game(5, 0.8) 
g2 <- erdos.renyi.game(5, 0.5) 

g1[] 
# 5 x 5 sparse Matrix of class "dgCMatrix" 
#    
# [1,] . 1 1 1 1 
# [2,] 1 . 1 1 . 
# [3,] 1 1 . 1 1 
# [4,] 1 1 1 . 1 
# [5,] 1 . 1 1 . 

g2[] 
# 5 x 5 sparse Matrix of class "dgCMatrix" 
#    
# [1,] . . 1 1 . 
# [2,] . . . 1 . 
# [3,] 1 . . 1 1 
# [4,] 1 1 1 . . 
# [5,] . . 1 . . 

gi <- graph.intersection(g1, g2) 
gi[] 
# 5 x 5 sparse Matrix of class "dgCMatrix" 
#    
# [1,] . . 1 1 . 
# [2,] . . . 1 . 
# [3,] 1 . . 1 1 
# [4,] 1 1 1 . . 
# [5,] . . 1 . . 

ecount(gi) 
# [1] 5