drake 函数中的进度条
Progress bar within drake functions
我正在尝试在函数内实现进度条以用于 drake-r 项目。我正在使用 progress_bar R6 class 的进度包。以下示例生成预期的进度条:
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)
控制台输出:
如何修改函数以仅显示一个在每次迭代时更新的进度条?
正如我之前提到的,drake
捕获消息以实现可重复性,因此与 progress
包存在摩擦。但是由于 Adam Kowalczewski pointed out at 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)
我正在尝试在函数内实现进度条以用于 drake-r 项目。我正在使用 progress_bar R6 class 的进度包。以下示例生成预期的进度条:
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)
控制台输出:
如何修改函数以仅显示一个在每次迭代时更新的进度条?
正如我之前提到的,drake
捕获消息以实现可重复性,因此与 progress
包存在摩擦。但是由于 Adam Kowalczewski pointed out at 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)