为什么igraph R中的cluster_infomap每次都给出不同的社区?

Why does cluster_infomap in igraph R give different communities each time?

我正在使用 R 中 igraph 的 cluster_infomap 函数来检测具有约 19,000 个边的无向、未加权网络中的社区,但我每次 运行 时都会得到不同数量的社区功能。这是我使用的代码:

   clusters <- list()
   clusters[["im"]] <- cluster_infomap(graph)
   membership_local_method <- membership(clusters[["im"]])
   length(unique(membership_local_method))

最后一行代码的结果在我进行的测试中在805-837之间。我尝试使用 set.seed() 以防出现随机数生成问题,但这并不能解决问题。

我的问题是 (1) 为什么我每次都得到不同的社区,以及 (2) 有没有办法让它稳定?

谢谢!

cluster_infomap(请参阅 ?igraph::cluster_infomap 寻求帮助)找到一个

community structure that minimizes the expected description length of a random walker trajectory

每当处理随机数生成时,每个 运行 都会得到不同的结果。大多数时候,您可以通过预先使用 set.seed 设置种子来覆盖它(请参阅 ?Random 以获得帮助):

identical(cluster_infomap(g), cluster_infomap(g))
# [1] FALSE
identical({set.seed(1);cluster_infomap(g)},{set.seed(1);cluster_infomap(g)})
# [1] TRUE

或图形化:

library(igraph)
set.seed(2)
g <- ba.game(150)
coords <- layout.auto(g)
par(mfrow=c(2,2))

# without seed: different results
for (x in 1:2) {
  plot(
    cluster_infomap(g), 
    as.undirected(g), 
    layout=coords, 
    vertex.label = NA, 
    vertex.size = 5
  )
}

# with seed: equal results
for (x in 1:2) {
  set.seed(1)
  plot(
    cluster_infomap(g), 
    as.undirected(g), 
    layout=coords, 
    vertex.label = NA, 
    vertex.size = 5
  )
}