Как показать, какой элемент функции обрабатывается в карте r purrr - PullRequest
0 голосов
/ 07 мая 2020

Я хочу иметь функцию, которая как ее часть показывает мне, с каким элементом всего списка элементов она работает, чтобы показать прогресс функции по моему списку. Я знаю, как это сделать, используя for l oop, где мой ввод связан с числовой позицией элемента в векторе, но как я могу это сделать с помощью purrr: map?

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

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

1 Ответ

2 голосов
/ 07 мая 2020

Несложно, но вы можете попробовать 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
...