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

如何为R语言kmeans聚类添加进度条?progressr无显示问题求助

解决kmeans聚类添加进度条的问题

base R的kmeans()函数本身没有集成progressr的进度更新钩子,所以直接用with_progress()包裹它不会自动显示进度条。要实现进度监控,我们可以手动拆分nstart的执行过程(这通常是kmeans最耗时的部分),在循环中更新进度:

实现代码

library(progressr)
handlers("txtprogressbar")

# 定义聚类参数
n_start <- 20
centers <- 10
iter_max <- 50

# 初始化进度跟踪器,步数等于nstart的次数
p <- progressor(steps = n_start)

# 循环执行单次初始化的kmeans,保留最优结果
best_result <- NULL
best_within_ss <- Inf

with_progress({
  for (i in 1:n_start) {
    current_run <- kmeans(data, centers = centers, nstart = 1, iter.max = iter_max)
    # 保留总内部平方和最小的结果(和原生kmeans逻辑一致)
    if (current_run$tot.withinss < best_within_ss) {
      best_within_ss <- current_run$tot.withinss
      best_result <- current_run
    }
    p() # 更新进度条
  }
})

clustering.kmeans <- best_result

说明

  • 我们将nstart=20拆分为20次独立的kmeans运行(每次nstart=1),这样可以在每次循环后触发进度更新。
  • 循环过程中会保留总内部平方和最小的结果,和原生kmeans(..., nstart=20)的逻辑完全一致。
  • 如果需要监控kmeans的迭代过程(iter.max),则需要修改kmeans源码或使用支持进度条的第三方聚类实现,但通常nstart阶段的耗时占比更高,监控这部分更实用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.16 12:44:58