2017-08-05 128 views
1

我目前正在尝试(理想情况下)使用igraph生成一个循环图邻接矩阵。我希望每个单位都与k个人成为邻居。在R中创建一个循环图或邻接矩阵,用igraph?

对于k = 2,我希望能得到:

library(igraph) 
as_adj(make_graph(c(1, 2, 1, 10, 2, 3, 3, 4, 4, 5 ,5,6, 6,7, 7,8, 8,9, 9, 10), directed = FALSE)) 

     [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10] 
[1,] 0 1 0 0 0 0 0 0 0  1 
[2,] 1 0 1 0 0 0 0 0 0  0 
[3,] 0 1 0 1 0 0 0 0 0  0 
[4,] 0 0 1 0 1 0 0 0 0  0 
[5,] 0 0 0 1 0 1 0 0 0  0 
[6,] 0 0 0 0 1 0 1 0 0  0 
[7,] 0 0 0 0 0 1 0 1 0  0 
[8,] 0 0 0 0 0 0 1 0 1  0 
[9,] 0 0 0 0 0 0 0 1 0  1 
[10,] 1 0 0 0 0 0 0 0 1  0 

是否有使用现有的功能igraph创建图表的方式,如上面的一个,但对于一个普通的K +谢谢。

+0

你说你希望有一个 “循环图”,但它似乎并不清楚这意味着什么对于k > 2。你只是想要一个图表,使所有节点的度数= k? – G5W

+0

@ G5W是的,这是主意,谢谢! – user321627

回答

2

你可以用sample_degseq做到这一点:

“这往往是创建具有给定顶点度的图形有用这正是sample_degseq 呢。”

k=3 # degree for each node 
n=10 # number of nodes 
g = sample_degseq(rep(k,n),method = "simple.no.multiple") 

邻接:

as_adj(g) 

[1,] . . 1 . 1 
[2,] . . 1 1 . 
[3,] 1 1 . . . 
[4,] . 1 . . 1 
[5,] 1 . . 1 . 

简介:

plot(g) 

enter image description here

+0

似乎有时上述函数会随机生成两个不连接在一起的网络。有没有办法强制每个节点之间的连接?换句话说,有时当我运行代码时,节点8,6,4在网络中,其余的在网络中。谢谢! – user321627

+0

您可以将它放在while循环中,并使用'edge_connectivity(g)'检查图形是否包含未连接的网络。在这种情况下,它将返回0.希望有所帮助! – Florian