【问题标题】:Simple way to combine EACH element of two complex lists in R?在R中组合两个复杂列表的每个元素的简单方法?
【发布时间】:2017-12-26 22:38:42
【问题描述】:

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

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

【问题讨论】:

    标签: r list lapply nested-lists


    【解决方案1】:

    您可以在 map 函数中使用 Map 和 lapply,对于 l1 的每个子列表,返回每年的 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)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多