progress包——在循环中显示进度条

progress包——在循环中显示进度条

终于找到了如何在R中实现下载进度条!

该项目的Github地址为:r-lib/progress

安装

1
devtools::install_github("r-lib/progress")

用法

基本用法:

1
2
3
4
5
6
library(progress)
pb <- progress_bar$new(total = 100)
for (i in 1:100) {
pb$tick()
Sys.sleep(1 / 100)
}

但是上面的进度条的问题在于进度条是在第一个tick命令执行后开始的,对于复杂耗时的程序并不适用,因为这时第一个tick命令需要很长时间才能结束,所以在程序开始前最好先执行tick(0),这会让进度条立即出现。

1
2
3
4
5
6
7
8
9
10
pb <- progress_bar$new(total = 100)
f <- function() {
pb$tick(0)
Sys.sleep(3)
for (i in 1:100) {
pb$tick()
Sys.sleep(1 / 100)
}
}
f()

自定义进度条的样式:

1
2
3
4
5
6
7
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)
}

也可以使用总时间:

1
2
3
4
5
6
7
pb <- progress_bar$new(
format = " 下载中 [:bar] :percent 已用时 :elapsed",
total = 100, clear = FALSE, width= 60)
for (i in 1:100) {
pb$tick()
Sys.sleep(1 / 100)
}

使用全部计时器(时:分:秒):

1
2
3
4
5
6
7
pb <- progress_bar$new(
format = " 下载中 [:bar] :elapsedfull",
total = 1000, clear = FALSE, width= 60)
for (i in 1:1000) {
pb$tick()
Sys.sleep(1 / 100)
}

还可以实现进度条状态更新:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
pb <- progress_bar$new(
format = " downloading :what [:bar] :percent eta: :eta",
clear = FALSE, total = 200, width = 60)
f <- function() {
for (i in 1:100) {
pb$tick(tokens = list(what = "foo "))
Sys.sleep(2 / 100)
}
for (i in 1:100) {
pb$tick(tokens = list(what = "foobar"))
Sys.sleep(2 / 100)
}
}
f()

显示下载速度、数据量与下载时间:

1
2
3
4
5
6
7
8
9
10
11
12
pb <- progress_bar$new(
format = " 下载速度 :rate,已下载 :bytes,用时 :elapsed",
clear = FALSE, total = 1e7, width = 60)
f <- function() {
for (i in 1:100) {
pb$tick(sample(1:100 * 1000, 1))
Sys.sleep(2/100)
}
pb$tick(1e7)
invisible()
}
f()

进度条还可以倒退:

1
2
3
4
5
6
7
8
9
10
11
pb <- progress_bar$new(
format = " 下载中 [:bar] :percent 已用时 :elapsed",
total = 100, clear = FALSE, width= 60)
f <- function() {
pb$tick(50) ; Sys.sleep(1)
pb$tick(-20) ; Sys.sleep(1)
pb$tick(50) ; Sys.sleep(1)
pb$tick(-30) ; Sys.sleep(1)
pb$tick(100)
}
f()


最后还会显示执行日志。

还可以使用emoji表情呢!
这个需要安装emo包,该包的GitHub地址为:hadley/emo

1
devtools::install_github("hadley/emo")

然后就可以通过修改completeincompletecurrent三个参数使用自定义的样式了!

1
2
3
4
5
6
7
8
9
10
pb <- progress_bar$new(
format = "下载中 [:bar] :percent 剩余时间: :eta ",
total = 100, clear = FALSE, width= 40,
complete = emo::ji("poop"),
incomplete = emo::ji("smile"),
current = emo::ji("zoom"))
for (i in 1:100) {
pb$tick()
Sys.sleep(1 / 100)
}

# R

评论

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×