You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

R语言igraph如何循环累积删除顶点逐次执行聚类分析

问题描述
  • 现有igraph网络对象test_FINAL,需按顺序累积移除指定顶点集合:vertex <- c(1, 3, 7, 9, 10)
  • 迭代规则:每次移除顶点后执行聚类分析,第一轮仅移除1号顶点,第二轮移除1、3号顶点,后续依次新增移除7、9、10号顶点,直到全部指定顶点移除完成后跑完最后一次聚类
  • 现有代码仅实现了「未删点的初始网络」「移除全部顶点的最终网络」两个状态的聚类统计(含聚类数量、群落规模、模块度计算),需要循环方案覆盖所有中间迭代场景

现有实现代码

# Library
library(igraph)

# Create data
set.seed(1)
data <- matrix(sample(0:1, 100, replace=TRUE, prob=c(0.8,0.2)), nc=10)
network <- graph_from_adjacency_matrix(data , mode='undirected', diag=F )

# Default network
par(mar=c(0,0,0,0))
plot(network)

vertex <- c(1, 3, 7, 9, 10)

# Estimating cluster statistics *prior to* removing vertices
pre_cluster <- cluster_fast_greedy(network)
length(pre_cluster); sizes(pre_cluster); modularity(pre_cluster)


# removing vertices
final_graph <- delete_vertices(network, c(vertex))
cluster_graph <- cluster_fast_greedy(final_graph)


# Estimating cluster statistics *after* removing vertices
length(cluster_graph); sizes(cluster_graph); modularity(cluster_graph)
最优循环实现方案

核心逻辑是按待删除顶点的顺序逐轮累加删除集合,每轮删点后立刻执行聚类计算,把所有轮次的结果统一存入结构化列表,方便后续调取分析,没有冗余计算。

# 加载igraph依赖
library(igraph)

# --------------------------
# 实际使用时替换成你自己的网络和待删顶点即可
# --------------------------
set.seed(1)
data <- matrix(sample(0:1, 100, replace=TRUE, prob=c(0.8,0.2)), nc=10)
network <- graph_from_adjacency_matrix(data , mode='undirected', diag=F )
vertex <- c(1, 3, 7, 9, 10)

# 初始化结果存储列表,先存入未删任何顶点的初始状态结果
cluster_results <- list(
  list(
    removed = c(),
    cluster = cluster_fast_greedy(network),
    cluster_num = length(cluster_fast_greedy(network)),
    cluster_sizes = sizes(cluster_fast_greedy(network)),
    mod = modularity(cluster_fast_greedy(network))
  )
)

# 逐轮累积删点计算
for (i in seq_along(vertex)) {
  # 当前轮次需要删除的顶点集合:前i个指定顶点
  del_vertex <- vertex[1:i]
  # 生成当前轮次的子网络
  current_net <- delete_vertices(network, del_vertex)
  # 执行聚类
  current_cluster <- cluster_fast_greedy(current_net)
  # 存入结果列表
  cluster_results[[i+1]] <- list(
    removed = del_vertex,
    cluster = current_cluster,
    cluster_num = length(current_cluster),
    cluster_sizes = sizes(current_cluster),
    mod = modularity(current_cluster)
  )
}

# 结果调取示例
# 查看第2轮(删除1、3两个顶点)的模块度
cluster_results[[3]]$mod
# 查看最终轮次(删完全部指定顶点)的群落规模
cluster_results[[length(cluster_results)]]$cluster_sizes

方案说明

  • 完全匹配需求的累积删点逻辑,不会出现顶点删除顺序错误、漏删的问题
  • 所有轮次的聚类对象、统计指标都结构化存储,后续做指标对比、群落可视化可以直接索引,不需要重复计算
  • 扩展性强,如果需要更换聚类算法(比如Louvain、Walktrap),只需要把代码里的cluster_fast_greedy替换成对应的igraph聚类函数即可;如果要新增统计指标,直接在结果存储的列表里加对应字段就行。

内容的提问来源于stack exchange,提问作者Susheel Busi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.30 00:51:16