为什么IGR中的cluster_infomap每次都提供不同的社区?

为什么IGR中的cluster_infomap每次都提供不同的社区?,r,graph,cluster-analysis,igraph,network-analysis,R,Graph,Cluster Analysis,Igraph,Network Analysis,我使用R中igraph的cluster_infomap函数来检测一个无方向、无权重、有19000条边的网络中的社区,但每次运行该函数时,我都会得到不同数量的社区。这是我正在使用的代码: clusters <- list() clusters[["im"]] <- cluster_infomap(graph) membership_local_method <- membership(clusters[["im"]]) length(unique(memb

我使用R中igraph的cluster_infomap函数来检测一个无方向、无权重、有19000条边的网络中的社区,但每次运行该函数时,我都会得到不同数量的社区。这是我正在使用的代码:

   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\u infomap有关帮助,请参见?igraph::cluster\u infomap查找

社区结构,最大限度地缩短 一条随机行走轨迹

无论何时处理随机数生成,每次运行都会得到不同的结果。大多数情况下,您可以通过使用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
  )
}
cluster_infomap有关帮助,请参见?igraph::cluster_infomap查找

社区结构,最大限度地缩短 一条随机行走轨迹

无论何时处理随机数生成,每次运行都会得到不同的结果。大多数情况下,您可以通过使用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
  )
}

从提供的信息中无法判断-您能否制作一个可复制的示例,在每次运行时给出不同的结果?请将鼠标悬停在R标记上-它要求最小的可复制示例;另请查看R帮助文件,例如“群集信息图”、“示例”部分和常规海报的答案,单击R标签。之后,相应地编辑和改进您的问题。一个好的程序通常提供最少的输入数据、所需的输出数据、代码尝试以及所需的包,所有这些都可以在新的/干净的R会话中复制粘贴运行。为什么?它使所有人都更容易跟随和参与。从提供的信息中无法判断-您能否制作一个可复制的示例,在每次运行时给出不同的结果?请将鼠标悬停在R标记上-它要求最小的可复制示例;另请查看R帮助文件,例如“群集信息图”、“示例”部分和常规海报的答案,单击R标签。之后,相应地编辑和改进您的问题。一个好的程序通常提供最少的输入数据、所需的输出数据、代码尝试以及所需的包,所有这些都可以在新的/干净的R会话中复制粘贴运行。为什么?这使大家更容易跟随和参与。感谢您的详细回答!我发现我需要在调用cluster\u infomap函数之前设置.seed。这就解决了问题。谢谢谢谢你详细的回答!我发现我需要在调用cluster\u infomap函数之前设置.seed。这就解决了问题。谢谢