【发布时间】:2019-12-10 18:41:15
【问题描述】:
我正在尝试在函数中实现进度条,以便在 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)
如何修改函数以仅显示一个在每次迭代时更新的进度条?
【问题讨论】:
-
为了重现性,
drake截获消息,以便您可以使用diagnose(your_target)$messages检索它们。这具有将目标的所有消息延迟到完成的副作用。但是 stdout(print()和cat())直接进入控制台,所以你仍然可以使用txtProgressBar()。 -
没关系,有办法解决这个问题。
-
community.rstudio.com/t/… 有解决方案。
dplyr显然有一个进度条,您可以从中打印,drake不会拦截。 -
更新:如果您使用开发
drake(GitHub 版本,`remotes::install_github("ropensci/drake")),您现在应该会显示进度条。 -
@landau 我没想到会这样!我很想尝试一下。谢谢!
标签: r drake-r-package