R 两种基础的进度条

第一种:tcltk包(弹出式)

实现逻辑:

  • ① 循环之前
  • ② 循环中
  • ③ 循环结束之后
具体示例

## 第一个位置:新建一个其实进度条弹窗
pb <- tkProgressBar("进度","已完成 %", 0, 100) 

star_time <- Sys.time() ## 记录程序开始时间

for (i in 1:nrow(my_data)){
    …… ## 循环的主体
    ## 第二个位置:实时反映进度
    info <- sprintf("已完成 %f%%", round(i*100/nrow(my_data)))  ## 设置进度条的完成度
    setTkProgressBar(pb, i*100/nrow(my_data), sprintf("进度 (%s)", info),info)  ## 设置进度条
}

end_time <- Sys.time()  ## 记录程序结束时间

## 第三个位置关闭进度条  
close(pb)  

run_time <- end_time - star_time  ## 计算程序运行时间

解释:
第一个位置:
在程序循环的外面,用来新建一个弹出的起始进度条窗口:
请添加图片描述
其中,四个常用参数分别为

  • 弹出窗的标题,
  • 标签
  • 下面进度条的起始数值
  • 下面进度条的结束数值

一般就这么设计就好了,反正汉字都能读懂。star_rime和end_time以及run_time是用来记录程序运行时间的,不影响进度条。

第二个位置:
在循环中,用来实时显示弹窗上的进度数值。运行的过程就是一直在显示程序的进度。在程序中的这两行代码的作用分别是:

  • 第一行是用来连接程序运行进度的,是作为第二行代码的引用。其中 i × 100 / n r o w ( m y _ d a t a ) i \times 100 / nrow(my\_data) i×100/nrow(my_data) 就是显示进度百分数,这个结果的解释就是目前循环到的 i i i 是在总循环次数 n r o w ( m y _ d a t a ) nrow(my\_data) nrow(my_data) 中的占比,乘以 100 100 100是因为我们最后显示的是百分数。sprintf()函数是一个连接函数,用来连接其中的参数,组成我们可以看到的“已完成XX%”。
  • 第二行是将我们的进度实时地反映到弹出的进度条窗口上,使用setTkProgressBar()函数,其中四个常用参数:
    1. 第一个参数就是找到我们在起始时设置的弹出窗口;
    2. 第二个参数是目前的值,就是对应弹出窗口上进度条的值(进度条进度),我们在初始化窗口的时候定义进度条的初始范围为0-100,所以我们使用的值 i × 100 / n r o w ( m y _ d a t a ) i\times100/nrow(my\_data) i×100/nrow(my_data) 就是对应0-100中的进度;
    3. 第三个是弹出窗口的标题,可以不用设置,也可以设置和下面的进度条同步,也就是会显示“进度(已完成XX%)”这样的标题;
    4. 第四个是标签选项,我们使用第一行代码生成的变量,就是实时显示在弹出窗的标签上(进度条上方的文字描述)。

第三个位置:
这个位置就一行语句,关闭弹出窗口,程序运行结束之后,这个语句会关闭弹出窗,其实你点弹出窗右上角的叉号也是一样的效果。

第二种:基于基础包(utils packages)

Rstudio打开时默认载入的基础包.


## 第一个位置:新建一个其实进度条
pb <- txtProgressBar(style=3)

star_time <- Sys.time() ## 记录程序开始时间

for (i in 1:nrow(my_data)){
    ……
    ## 第二个位置:实时反映进度
    setTxtProgressBar(pb, i/nrow(my_data))
}

end_time <- Sys.time()  ## 记录程序结束时间

## 第三个位置关闭进度条
close(pb)

run_time <- end_time - star_time  ## 计算程序运行时间

解释:

  • 同样也是三个位置,也是同样的功能:新建一个初始进度条,然后实时反映,最后再关闭进度条,唯一的区别就是这个没有弹窗了。
    • 第一个位置:txtProgressBar()函数,其中的一个style参数取值为1,2,3,其中3是最好看的,所以就用3了;
    • 第二个位置:setTxtProgressBar()有两个参数,功能就是找到初始进度条然后实时给他进度值,第一个参数就是初始进度条,第二个参数就是实时进度值,也就是循环到哪个变量了,然后除以总变量;
    • 第三个位置:close()函数关闭这个进度条。
  • 2
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值