This function can be used together with rewire()
to
randomly rewire the edges while preserving the original graph's degree
distribution.
keeping_degseq(loops = FALSE, niter = 100)
The rewiring algorithm chooses two arbitrary edges in each step ((a,b) and (c,d)) and substitutes them with (a,d) and (c,b), if they not already exists in the graph. The algorithm does not create multiple edges.
g <- make_ring(10)
g %>%
rewire(keeping_degseq(niter = 20)) %>%
degree()
#> [1] 2 2 2 2 2 2 2 2 2 2
print_all(rewire(g, with = keeping_degseq(niter = vcount(g) * 10)))
#> IGRAPH 09c243a U--- 10 10 -- Ring graph
#> + attr: name (g/c), mutual (g/l), circular (g/l)
#> + graph attributes:
#> | + name:
#> | [1] "Ring graph"
#> | + mutual:
#> | [1] FALSE
#> | + circular:
#> | [1] TRUE
#> + edges from 09c243a:
#> [1] 2-- 8 3-- 7 6-- 9 4-- 5 5--10 1-- 7 6--10 2-- 3 4-- 9 1-- 8