首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >drake函数中的进度条

drake函数中的进度条
EN

Stack Overflow用户
提问于 2019-12-11 02:41:16
回答 1查看 228关注 0票数 0

我正在尝试在函数中实现进度条,以便在drake-r项目中使用。我正在使用progress_bar R6类的进度包。下面的示例生成预期的进度条:

代码语言:javascript
复制
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工作流中,每次迭代都会显示一个新的进度条:

代码语言:javascript
复制
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)

控制台输出:

如何修改函数,使其只显示一个在每次迭代中更新的进度条?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-12-11 09:46:15

正如我前面提到的,drake捕获消息以实现可重复性,因此与progress包存在冲突。但正如Adam Kowalczewskihttps://community.rstudio.com/t/including-a-progress-bar-in-a-drake-plan-step/42516上指出的那样,dplyr有自己的进度条,您可以使用pb$tick()$print()将其打印到标准输出。这对我很有效:

代码语言:javascript
复制
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)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59273524

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档