本来是想找显示shiny中程序运行进度的方法,不过只看到显示循环执行进度的~Whatever,记录下吧
一、tcltk包
案例:
library(tcltk)
u <- 1:2000
#开启进度条
pb <- tkProgressBar(title="进度",label="已完成 %", min=0, max=100, initial = 0, width = 300)
for(i in u) {
info<- sprintf("已完成 %d%%", round(i*100/length(u)))
setTkProgressBar(pb, value = i*100/length(u), title = sprintf("进度 (%s)",info),label = info)
}
#关闭进度条
close(pb)
参数说明:
tkProgressBar(title = "R progress bar", label = "",
min = 0, max = 1, initial = 0, width = 300)
getTkProgressBar(pb)
setTkProgressBar(pb, value, title = NULL, label = NULL)
## S3 method for class 'tkProgressBar'
close(con, ...)
函数 | 说明 |
tkProgressBar | 显示包含标签和进度条的部件 |
setTkProgessBar | 用以更新值和标签 |
具体参数设置 | |
title, label | 字符串,分别给定对话框窗口的标题和标签 |
min, max | 数值型,进度条的范围 |
initial, value | 进度条的初始值 |
width | 进度条的像素 |
pb, con | tkProgressBar 的对象 |
二、progress包
可以配置进度条,显示百分比、经过时间、估计完成时间。
案例:
默认参数
library(progress)
pb <- progress_bar$new(total = 100)
for (i in 1:100) {
pb$tick()
Sys.sleep(1 / 100)
}
估计完成时间
pb <- progress_bar$new(
format = " downloading [:bar] :percent eta: :eta",
total = 100, clear = FALSE, width= 60)
for (i in 1:100) {
pb$tick()
Sys.sleep(1 / 100)
}
### 修改部分参数
pb <- progress_bar$new(
format = " 完成百分比 [:bar] :percent 剩余时间: :eta",
total = 500, clear = FALSE, width= 60)
for (i in 1:500) {
pb$tick()
Sys.sleep(1 / 100)
}
显示下载百分比,以及剩余需要完成的时间
计算执行的时间
pb <- progress_bar$new(
format = " 完成百分比 [:bar] :percent 执行时间 :elapsed",
total = 500, clear = FALSE, width= 60)
for (i in 1:500) {
pb$tick()
Sys.sleep(1 / 100)
}
参数说明:
创建进度条的函数
函数 | 说明 |
progress_bar$new() | 创建进度条 |
参数设置 | |
format | 可以进度条的格式,默认是百分比"[:bar] :percent"。进度条是在左边的括号内,百分比是在右边打印的 |
total | 进度总数,默认100 |
width | 进度条宽度,默认是当前终端页面的宽度-2 |
stream | 进度条的输出方式,默认stderr(),但是在Rstudio下有bug,此时使用标准输出stdout 。如果不在终端或者Rstudio中输出,则无进度条打印 |
complete | 完成的标识,默认为"=" |
incomplete | 未完成的标识,默认为"-" |
callback | 进度条结束时,调用回调函数。 进度条对象本身作为单个参数传递给回调函数 |
clear | 进度条结束时,是否清除。默认清除 |
show_after | 几秒之后在屏幕上显示进度条,对于非常短的过程,可能根本不值得展示。默认1/10秒 |
force | 是否强制显示进度条,即使给定的(或默认的)流似乎不支持它 |
使用进度条的函数
有两个函数更新进度条:
progress_bar$tick()
按照1个或者其他指定的个数增加进度条的进度
progress_bar$update
按照比例
进度条在第一个tick命令后显示,这对于长时间的计算可能是不可取的,因为在第一次运行之前没有显示任何东西。在计算或者下载的时候设置tick(0)可以即时展示进度条。
函数 | 说明 |
:bar | 进度条本身 |
:current | 当前进度数 |
:total | 总进度数 |
:elapsed | Elapsed time in seconds |
:eta | 估计完成时间 |
:percent | 完成百分比 |
:rate | 下载速率,每秒字节数 |
:bytes | 显示字节。如果你事先不知道文件的大小,可以对下载或文件读取有用 |
:spin | 显示一个微调器,即使进程在0时也会更新 |
REF
Package文档即可