有没有一种方法可以使用purrr::map_dfr()
来运行一个函数,该函数包含不同长度/缺失的日期列表?
到目前为止,我可以用map
,然后是enframe
,然后是unnest
来做到这一点:
library(tidyverse)
date_list <- list(as.Date('2020-01-01'),
c(as.Date('2021-01-01'), as.Date('2021-06-01')),
NA_Date_,
c(as.Date('2022-01-01'), as.Date('2022-08-01')),
as.Date('2023-01-01'))
map(date_list, max) |>
enframe(value = "latest") |>
unnest(cols = "latest") |>
select(latest)
#> # A tibble: 5 × 1
#> latest
#> <date>
#> 1 2020-01-01
#> 2 2021-06-01
#> 3 NA
#> 4 2022-08-01
#> 5 2023-01-01
但是,使用更简洁的map_dfr
会返回以下错误:
map_dfr(date_list, max, .id = "latest")
#> Error in `dplyr::bind_rows()`:
#> ! Argument 1 must be a data frame or a named atomic vector.
#> Backtrace:
#> ▆
#> 1. └─purrr::map_dfr(date_list, max, .id = "latest")
#> 2. └─dplyr::bind_rows(res, .id = .id)
#> 3. └─rlang::abort(glue("Argument {i} must be a data frame or a named atomic vector."))
创建于2023-04-18带有reprex v2.0.2
2条答案
按热度按时间pcrecxhr1#
你想要
purrr::map_vec()
吗?创建于2023-04-18带有reprex v2.0.2.9000
eivgtgni2#
请注意,
map_df
的每个结果元素都应该是一个 Dataframe 。然后它可以将这些 Dataframe 组合成一个 Dataframe 。下面是一个解决方案。只是为了指出,请注意map_df
map_dfr
map_dfc
及其等效的2个输入即map2_df
等已被取代。阅读这些函数的帮助页面。