我正在尝试在函数中实现进度条,以便在drake-r项目中使用。我正在使用progress_bar R6类的进度包。下面的示例生成预期的进度条:
library(dplyr)
library(purrr)
library(progress)
data <- mtcars %>%
split(.$carb)
n <- length(data)
pb <- progress::progress_bar$new(total = n)
data <- data %>%
map(~{pb$tick()
Sys.sleep(2)
lm(mpg ~ wt, data = .x)
})如果我把它放到我的drake工作流中,每次迭代都会显示一个新的进度条:
fit_lm <- function() {
data <- mtcars %>%
split(.$carb)
n <- length(data)
pb <- progress::progress_bar$new(total = n)
data <- data %>%
map(~{pb$tick()
Sys.sleep(2)
lm(mpg ~ wt, data = .x)
})
return(data)
}
plan <- drake_plan(
models = fit_lm()
)
make(plan)控制台输出:

如何修改函数,使其只显示一个在每次迭代中更新的进度条?
发布于 2019-12-11 09:46:15
正如我前面提到的,drake捕获消息以实现可重复性,因此与progress包存在冲突。但正如Adam Kowalczewski在https://community.rstudio.com/t/including-a-progress-bar-in-a-drake-plan-step/42516上指出的那样,dplyr有自己的进度条,您可以使用pb$tick()$print()将其打印到标准输出。这对我很有效:
library(drake)
library(dplyr)
library(purrr)
fit_lm <- function() {
data <- mtcars %>%
split(.$carb)
n <- length(data)
pb <- progress_estimated(n = n)
data <- data %>%
map(~{
pb$tick()$print()
Sys.sleep(2)
lm(mpg ~ wt, data = .x)
})
return(data)
}
plan <- drake_plan(
models = fit_lm()
)
make(plan)https://stackoverflow.com/questions/59273524
复制相似问题