对于 R 中的列表,我想应用一个函数,该函数接受每个列表中的每个元素并返回三个数字,即输入值加上 1、2 和 3。我想创建一个列表列表,这样对于每个原始列表的组成部分,返回一个列表,其中该列表的每个组成部分都是原始列表的每个元素的输出。对于列表的所有组件,我得到一个列表列表。
具体来说, 对于列表
lst <- list(a = 1:3, b = 4:5, c = 6:8)
,
我想要一个如下列表:
> lst2
[[1]]
[[1]][[1]]
[1] 2 3 4
[[1]][[2]]
[1] 3 4 5
[[1]][[3]]
[1] 4 5 6
[[2]]
[[2]][[1]]
[1] 5 6
[[2]][[2]]
[1] 6 7
[[3]]
[[3]][[1]]
[1] 7 8 9
[[3]][[2]]
[1] 8 9 10
[[3]][[3]]
[1] 9 10 11
我想使用 tidyverse 生态系统中 purr(r) 包中的 map 函数或相关函数来完成任务。在基本 r 中使用 Map 或 apply 函数系列就可以了。我只是不想使用 for 循环。
使用
lapply
或 purrr::map
你可以这样做:
lst <- list(a = 1:3, b = 4:5, c = 6:8)
lst |>
unname() |>
lapply(\(el) lapply(el, \(x) seq(length(el)) + x))
#> [[1]]
#> [[1]][[1]]
#> [1] 2 3 4
#>
#> [[1]][[2]]
#> [1] 3 4 5
#>
#> [[1]][[3]]
#> [1] 4 5 6
#>
#>
#> [[2]]
#> [[2]][[1]]
#> [1] 5 6
#>
#> [[2]][[2]]
#> [1] 6 7
#>
#>
#> [[3]]
#> [[3]][[1]]
#> [1] 7 8 9
#>
#> [[3]][[2]]
#> [1] 8 9 10
#>
#> [[3]][[3]]
#> [1] 9 10 11