当使用 R 的 purrr 包嵌套在另一个列表中时,如何重命名列表的元素?

How do you rename the elements of a list when they are nested within another list using R's purrr package?

NBER 根据高峰和低谷确定经济衰退的日期。 json 版本的数据是 here。一个简单的版本如下所示:

list_old <- list(list(peak = "", trough = "1854-12-01"), list(peak = "1857-06-01", trough = "1858-12-01"))

为了在 highcharter 包中显示 plotBands,必须重命名列表,以便“峰值”变为“开始”,“低谷”变为“结束”。结果列表如下所示:

list_new <- list(list(start = "", end = "1854-12-01"), list(start = "1857-06-01", end = "1858-12-01"))

有没有办法使用 R 中的 tidyverse 来实现这一点? (我一直在查看 purrr 包。)

您可以只使用 lapply 重命名每个列表。

lapply(list_old, \(x) {
  names(x) <- c("start", "end")
  x
  }
)
#> [[1]]
#> [[1]]$start
#> [1] ""
#> 
#> [[1]]$end
#> [1] "1854-12-01"
#> 
#> 
#> [[2]]
#> [[2]]$start
#> [1] "1857-06-01"
#> 
#> [[2]]$end
#> [1] "1858-12-01"

如果您想要一个整洁的解决方案,可以使用 purrr::map()。如果使用 purrr,来自@Donald Seinen 的评论,也可以使用 set_names()

library(purrr)

map(
  list_old,
  set_names,
  c("start", "end")
)
#> [[1]]
#> [[1]]$start
#> [1] ""
#> 
#> [[1]]$end
#> [1] "1854-12-01"
#> 
#> 
#> [[2]]
#> [[2]]$start
#> [1] "1857-06-01"
#> 
#> [[2]]$end
#> [1] "1858-12-01"