如何为遍历字符型变量的R循环显示进度?
为遍历字符型变量的R循环添加进度显示
当然可以给遍历字符型变量的循环添加进度显示,svMisc的progress()并非只支持数值型变量的循环,只要结合迭代索引就能适配。下面提供几种实用的实现方式:
方法1:适配svMisc包实现进度显示
通过遍历字符向量的索引,结合总迭代次数,就能让progress()正常工作:
library(tidyverse) library(svMisc) # 加载示例数据 df1 <- read.csv("https://stats.idre.ucla.edu/stat/data/hdp.csv") df2 <- structure(list(Column1 = c(rep("remission ~ 1 + IL6 + CRP +(1 + IL6 + CRP | DID)", 10))), row.names = c(NA, -10L), class = "data.frame") fmlas <- unlist(df2) model_list <- list() total_iter <- length(fmlas) for (i in seq_along(fmlas)){ current_formula <- fmlas[i] # 更新进度条 progress(i, total_iter) model_list[[current_formula]] <- glm(as.formula(current_formula), data = df1) } # 关闭进度显示 progress(total_iter, total_iter, close = TRUE)
方法2:用progress包创建美观进度条
progress包提供了样式丰富的进度条,无需手动处理索引,只需初始化时指定总次数即可:
library(tidyverse) library(progress) # 加载示例数据 df1 <- read.csv("https://stats.idre.ucla.edu/stat/data/hdp.csv") df2 <- structure(list(Column1 = c(rep("remission ~ 1 + IL6 + CRP +(1 + IL6 + CRP | DID)", 10))), row.names = c(NA, -10L), class = "data.frame") fmlas <- unlist(df2) model_list <- list() total_iter <- length(fmlas) # 初始化进度条,自定义显示格式 pb <- progress_bar$new( format = " 处理中 [:bar] :percent 剩余时间: :eta", total = total_iter, clear = FALSE, width = 60 ) for (formula in fmlas){ pb$tick() # 每次迭代更新进度 model_list[[formula]] <- glm(as.formula(formula), data = df1) }
方法3:手动实现轻量进度显示(无需额外包)
如果不想安装新包,可以用基础函数实现简单的进度提示:
library(tidyverse) # 加载示例数据 df1 <- read.csv("https://stats.idre.ucla.edu/stat/data/hdp.csv") df2 <- structure(list(Column1 = c(rep("remission ~ 1 + IL6 + CRP +(1 + IL6 + CRP | DID)", 10))), row.names = c(NA, -10L), class = "data.frame") fmlas <- unlist(df2) model_list <- list() total_iter <- length(fmlas) for (i in seq_along(fmlas)){ current_formula <- fmlas[i] # 实时打印进度百分比,\r实现单行覆盖更新 cat(sprintf("当前进度: %.0f%%\r", (i/total_iter)*100)) model_list[[current_formula]] <- glm(as.formula(current_formula), data = df1) } # 循环结束后换行并提示完成 cat("\n循环执行完成!\n")
内容的提问来源于stack exchange,提问作者confusedindividual
相关产品推荐
相关产品推荐

