【问题标题】:append a list element-wise to elements of a nested list in R将列表元素附加到 R 中嵌套列表的元素
【发布时间】:2016-06-15 21:45:35
【问题描述】:

我是 R 新手,但我仍在尝试了解 apply 系列而不是使用循环。

我有两个列表,一个嵌套,另一个不嵌套,都由字符组成:

>lst1 <- list(c("ABC", "DEF", "GHI"), c("JKL", "MNO", "PQR"))
>lst2 <- c("abc", "def")

我想创建第三个列表,以便将 lst2 的每个元素作为 lst1 中相应子列表的最后一个元素附加。所需的输出如下所示:

>lst3
[[1]]
[1] "ABC" "DEF" "GHI" "abc"

[[2]]
[1] "JKL" "MNO" "PQR" "def"

到目前为止,我在 R 中的经验告诉我,可能有一种方法可以在不显式编写循环的情况下做到这一点。

【问题讨论】:

  • 我会做mapply(c, lst1, lst2, SIMPLIFY=F),但这可能不是您想要的(“无循环”)?
  • 完美运行。谢谢!

标签: r list nested-lists


【解决方案1】:

您可以使用Map,它的功能与mapply(..., simplify = F) 完全相同:

Map(c, lst1, lst2)
[[1]]
[1] "ABC" "DEF" "GHI" "abc"

[[2]]
[1] "JKL" "MNO" "PQR" "def"

【讨论】:

    【解决方案2】:

    如果你在lst1 向量的长度上应用你的函数,你绝对可以使用lapply。这有效:

    lapply(1:length(lst1),function(i) append(lst1[[i]],lst2[[i]]))
    
    [[1]]
    [1] "ABC" "DEF" "GHI" "abc"
    
    [[2]]
    [1] "JKL" "MNO" "PQR" "def"
    

    【讨论】:

    • 效果很好。感谢您的建议。
    【解决方案3】:

    lapply 不会做你需要的。您可以使用带有append 的循环来执行此操作:

    list1 <- list(c("ABC","DEF","GHI"),c("JKL","MNO","PQR"))
    list2 <- c("abc","def")
    
    listcomplete <- list(c("ABC","DEF","GHI","abc"),c("JKL","MNO","PQR","def"))
    
    for (i in 1:length(list2)) {
      list1[[i]] <- append(list1[[i]],list2[i])
    }
    

    结果:

    > list1
    [[1]]
    [1] "ABC" "DEF" "GHI" "abc"
    
    [[2]]
    [1] "JKL" "MNO" "PQR" "def"
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-04-10
      • 2014-06-10
      • 1970-01-01
      • 2020-09-02
      • 2017-12-18
      • 2022-01-06
      • 1970-01-01
      • 2017-06-23
      相关资源
      最近更新 更多