【问题标题】:replicate within list element to make nested list在列表元素内复制以制作嵌套列表
【发布时间】:2015-02-05 19:58:12
【问题描述】:

说我们有

a <- list(letters[1:4],letters[5:6])

我们如何在每个元素中复制以获得类似的列表

b <- list(list(letters[1:4],letters[1:4]),list(letters[5:6],letters[5:6]))

我可以创建一个空列表,a[1] 和 a[2] 用复制的向量填充它,然后将它们全部添加到一个大列表中。

但我认为应该有一种我想念的快速方法?

我做到了

lapply(a, function(x){replicate(2,x, simplify=FALSE)})

但是索引看起来很奇怪 例如

[[1]]
[[1]][[1]]
[[1]][[1]][[1]]
[1] "a" "b" "c" "d"

[[1]][[1]][[2]]
[1] "a" "b" "c" "d"

【问题讨论】:

    标签: r list nested


    【解决方案1】:

    这是一种选择:

    lapply(a, function(X) rep(list(X), 2))
    # [[1]]
    # [[1]][[1]]
    # [1] "a" "b" "c" "d"
    # 
    # [[1]][[2]]
    # [1] "a" "b" "c" "d"
    # 
    # 
    # [[2]]
    # [[2]][[1]]
    # [1] "e" "f"
    # 
    # [[2]][[2]]
    # [1] "e" "f"
    

    【讨论】:

      【解决方案2】:

      您可以将replicate 应用于列表中的每个元素。在这里,我们使用lapply

      lapply(a, replicate, n=2, simplify=F)
      

      nsimplify 是由lapply 转发给replicate 的参数(参见?replicate)。这会产生:

      List of 2
       $ :List of 2
        ..$ : chr [1:4] "a" "b" "c" "d"
        ..$ : chr [1:4] "a" "b" "c" "d"
       $ :List of 2
        ..$ : chr [1:2] "e" "f"
        ..$ : chr [1:2] "e" "f"
      

      请注意,为了清楚起见,我们显示的是 str(...) 的输出,而不是实际结果。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2023-03-26
        • 2011-02-02
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多