在R中组合两个复杂列表的EACH元素的简单方法?

时间:2017-07-21 02:42:32

标签: r list lapply nested-lists

假设我有两个列表,每个列表包含多个子元素:

l1 <- list(c(1933:1935),c(1950:1954), c(2012:2013))  #groups of years
l2 <- list(c(19:21),c(19:24),c(22:26))               #groups of plot numbers

我想创建一个新列表(我们称之为“l3”)的子列表,其中:

  • 我的新列表(l3)的每个元素都对应l1的每个元素

    • 在这种情况下,l1有3个元素(每个元素包含可变数年),所以我希望l3也有3个主要元素。
  • l3的给定元素中,我希望每年在l1的相应元素中列出中的所有l2元素 l2

  • 的相同元素

结果如下:

> l3
[[1]]
[[1]]
[1] 19 20 21

[[1]]
[[2]]
[1] 19 20 21

[[1]]
[[3]]
[1] 19 20 21

[[2]]
[[1]]
[1] 19 20 21 22 23 24

[[2]]
[[2]]
[1] 19 20 21 22 23 24

[[2]]
[[3]]
[1] 19 20 21 22 23 24

[[2]]
[[4]]
[1] 19 20 21 22 23 24

[[3]]
[[1]]
[1] 22 23 24 25 26

[[3]]
[[2]]
[1] 22 23 24 25 26

1 个答案:

答案 0 :(得分:1)

您可以在地图函数中使用Map lapplyl1的每个子列表返回每年的number向量:

Map(function(years, numbers) lapply(years, function(x) numbers), l1, l2)

[[1]]
[[1]][[1]]
[1] 19 20 21

[[1]][[2]]
[1] 19 20 21

[[1]][[3]]
[1] 19 20 21


[[2]]
[[2]][[1]]
[1] 19 20 21 22 23 24

[[2]][[2]]
[1] 19 20 21 22 23 24

[[2]][[3]]
[1] 19 20 21 22 23 24

[[2]][[4]]
[1] 19 20 21 22 23 24

[[2]][[5]]
[1] 19 20 21 22 23 24


[[3]]
[[3]][[1]]
[1] 22 23 24 25 26

[[3]][[2]]
[1] 22 23 24 25 26

或其他选项,请使用rep

Map(function(n, v) rep(list(v), n), lengths(l1), l2)