首页 > 解决方案 > 如何在 r purrr map 中显示正在处理的函数元素

问题描述

我想要一个函数,作为它的一部分,它向我显示它正在工作的整个元素列表中的哪个元素,以显示函数在我的列表中的进度。我知道如何使用 for 循环来做到这一点,其中我的输入与向量中元素的数字位置相关,但我如何使用 purrr:map 来做到这一点?

x = c('a', 'b', 'c')

for(i in 1:length(x)) {
  print(paste0(i, '/', length(x), ' complete'))
}

标签: rdictionarypurrrseq

解决方案


简单,但您可以尝试imap()pmap()

library(purrr)

mods <- mtcars %>%
  split(.$cyl) %>%
  imap(~ {Sys.sleep(3) ; mod <- lm(mpg ~ wt, data = .x); cat(.y, "cyl complete\n"); return(mod)})  

4 cyl complete
6 cyl complete
8 cyl complete

或者:

dat <- mtcars %>%
  split(.$cyl)

mods <-
  pmap(list(dat, seq_along(dat), length(dat)), ~ {
    Sys.sleep(3)
    mod <- lm(mpg ~ wt, data = ..1)
    cat(..2, "/", ..3, "complete\n")
    return(mod)
  })

1 / 3 complete
2 / 3 complete
3 / 3 complete

推荐阅读