【问题标题】:bind specific elements of a list绑定列表的特定元素
【发布时间】:2018-12-12 11:07:06
【问题描述】:

我有一个包含不同长度元素的列表。 我想将长度小于 L 的元素绑定在一起,并将单个短元素替换为联合元素。

例如:

L = list()
for (i in 1:3) {
    L[[i]] = seq(1:i)
}

我想将元素 1,2 合并为包含数字 1,1,2 而不是前两个元素的元素“12”。 我怎样才能系统地(循环或矢量地)做到这一点?

想要的结果是:第一个元素 c(1,1,2),第二个元素 c(1,2,3)

【问题讨论】:

    标签: r list


    【解决方案1】:

    我们可以做

    c(list(unlist(L[lengths(L) < 3])), L[lengths(L) >= 3])
    # [[1]]
    # [1] 1 1 2
    #
    # [[2]]
    # [1] 1 2 3
    

    第二部分L[lengths(L) &gt;= 3] 包含L 的所有足够长的元素。那么L[lengths(L) &lt; 3]就是L的所有短元素的列表,unlist将它们组合在一起。

    【讨论】:

      【解决方案2】:

      我们得到list('L')的maxlength,通过与lengths比较得到一个逻辑索引,连接那些不匹配最大长度的元素并附加到另一个列表元素

      i1 <- max(lengths(L))
      i2 <- i1 != lengths(L)
      c(list(Reduce(`c`, L[i2])), L[!i2])
      #[[1]]
      #[1] 1 1 2
      
      #[[2]]
      #[1] 1 2 3
      

      【讨论】:

        猜你喜欢
        • 2014-11-20
        • 1970-01-01
        • 2020-01-10
        • 2020-02-18
        • 2018-10-19
        • 2021-09-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多