按列表中列表中的值排序

时间:2019-03-30 22:57:48

标签: r vector

这是我的清单

example <- list(list(vals = list(1, 2, 3), param = list(4,5,6), p.val = 0.5),
 list(vals = list(1, 2, 3), param = list(4,5,6), p.val = 0.2), 
 list(vals = list(1, 2, 3), param = list(4,5,6), p.val = 1.2), 
 list(vals = list(1, 2, 3), param = list(4,5,6), p.val = 0.9))

如何按其p-val对列表进行升序排序?

我的主要问题是,我似乎看到的唯一解决方案是遍历整个列表的for循环,实际上是10万个元素。

编辑:我将示例列表更改为对我的实际数据更真实。

1 个答案:

答案 0 :(得分:1)

由于“第一级”列表值实际上也是列表,因此您需要首先提取它们,然后对结果运行order。对于第二个版本,您只需将“ p.val”替换为提取索引

dput(example[ order( sapply(example, "[[", 'p.val')) ] )
  list(list(vals = list(1, 2, 3), param = list(4, 5, 6), p.val = 0.2), 
      list(vals = list(1, 2, 3), param = list(4, 5, 6), p.val = 0.5), 
      list(vals = list(1, 2, 3), param = list(4, 5, 6), p.val = 0.9), 
      list(vals = list(1, 2, 3), param = list(4, 5, 6), p.val = 1.2))

这不会改变example的值,因此要使其成为“ stick”,您需要将结果分配给一个名称,可能是相同的名称example