【问题标题】:Sorting a list by length of its elements按元素长度对列表进行排序
【发布时间】:2014-11-07 13:50:22
【问题描述】:

对不起,基本问题,但我有一个元素列表,它们是数字向量

str(list1)
    List of 34
     $ 1      : num [1:2037171] 98.3 98.2 98.1 97.4 97.9 98 97.7 98.1 98.4 98 ...
     $ 3      : num [1:692076] 98.8 98.1 97.6 96.6 96.4 96.9 96.1 95.8 96.7 96.5 ...
     $ 2      : num [1:82621] 97.7 97.7 97.4 97.7 98.4 98.1 97.4 98 97.6 98.3 ..
     .
     .
     .

,似乎 list.sort(or order) 不起作用,因为 list1 不是原子向量。我想按其向量的长度对 list1 进行排序。 这怎么可能?很抱歉“滥用”这个网站作为我的个人 R 教程。在谷歌上找不到答案。

【问题讨论】:

    标签: r


    【解决方案1】:
    len <- sapply(list1, length)
    list1[order(len)]
    

    【讨论】:

      【解决方案2】:

      您需要遍历列表以获取长度:

      mylist <- list(1:5, 1:10, 1:2)
      mylist[order(sapply(mylist, length))]
      # [[1]]
      # [1] 1 2
      # 
      # [[2]]
      # [1] 1 2 3 4 5
      # 
      # [[3]]
      # [1]  1  2  3  4  5  6  7  8  9 10
      

      【讨论】:

      • 这里的每个人似乎都使用sapply而不是vapply
      • 你当然可以使用vapply,但我不认为有迫切需要。
      • 当然。另一方面,我强烈认为应该不鼓励使用sapply,因为它速度较慢并且不能保证值是给定类型的。我认为根据我们想要的输出使用lapplyvapply 会更好。
      • 如果你想在这里使用vapply,你必须考虑length 可以为很长的向量返回一个double。我不希望列表会如此之长,以至于sapplyvapply 之间的速度差异对这项任务很重要。至少,问题没有表明这一点。
      • 在这种情况下,差异当然不会很明显。我只是想知道为什么这里几乎每个人都使用sapply 没有任何好处(除了在调用中键入另一个参数),而在许多情况下它可能会产生非常糟糕的后果。我认为这是一个坏习惯。我错了吗?我错过了什么吗?
      猜你喜欢
      • 2022-11-18
      • 1970-01-01
      • 1970-01-01
      • 2020-02-05
      • 2013-12-03
      • 1970-01-01
      • 1970-01-01
      • 2019-07-19
      • 2023-03-12
      相关资源
      最近更新 更多