当使用 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"
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"