函数应用于列表的每个元素并返回 R 中的列表的列表

问题描述 投票:0回答:1

对于 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 循环。

r tidyverse apply purrr mapply
1个回答
0
投票

使用

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
© www.soinside.com 2019 - 2024. All rights reserved.