繁体   English   中英

在计算 R 中的分组 data.frame 期间,是否有一种优雅的方式来显示进度条?

[英]Is there an elegant way to show a progress bar during the computation of a grouped data.frame in R?

我正在将复杂的 function 应用于分组的 data.frame。 为简单起见,在这里,这个 function 将被视为 colSums function。 假设我们有以下data.frame:

df <- data.frame(A=runif(600000,0,1),
                 B=rep(c("group1", "group2","group3","group4","group5","group6"), 100000))

此外,我想执行 dplyr 链:

df <- df %>%
    group_by(.data$B) %>%
    summarize(colSums(across()))

在此计算期间,我希望有一个进度条显示剩余时间。 例如:

[==========================>] 100%

我知道 dplyr 中有解决方案,但据我所知它们已被取代。 因此,我想使用 package Progress。 此进度条基于 for 循环期间的刻度更新。 我想知道,这个 dplyr 链是否可行。 到目前为止,我无法提出解决方案。 有任何想法吗?

这是一个使用progress package的解决方案。 您必须初始化进度条并告诉它组/刻度的数量。 然后在您的自定义计算中,您增加条形。

library(tidyverse)
library(progress)

df <- data.frame(A=runif(600000,0,1),
                 B=rep(c("group1", "group2","group3","group4","group5","group6"), 100000)) %>% 
    group_by(B)

my_slow_function <- function(col){
    pb$tick()
    Sys.sleep(0.5)
    sum(col)
}

num_ticks <- n_groups(df)
pb <- progress_bar$new(format = "[:bar] :current/:total (:percent) elapsed :elapsed eta :eta",
                       total = num_ticks)


df %>% 
    summarize(output = my_slow_function(A))

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM