Skip to contents

This function can be used together with rewire() to randomly rewire the edges while preserving the original graph's degree distribution.

Usage

keeping_degseq(loops = FALSE, niter = 100)

Arguments

loops

Whether to allow destroying and creating loop edges.

niter

Number of rewiring trials to perform.

Details

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.

See also

sample_degseq()

Other rewiring functions: each_edge(), rewire()

Author

Tamas Nepusz ntamas@gmail.com and Gabor Csardi csardi.gabor@gmail.com

Examples

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 efd29a6 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 efd29a6:
#>  [1] 2-- 8 3-- 7 6-- 9 4-- 5 5--10 1-- 7 6--10 2-- 3 4-- 9 1-- 8