我有与此类似的列表列表:
a <- list(
list(day = 5, text = "foo"),
list(text = "bar", day = 1),
list(text = "baz", day = 3),
list(day = 2, text = "quux")
)
字段数量未知且字段不正常。
如何根据日期对此列表进行排序?我需要列表升序排序。我搜索但我只发现了如何对矢量进行排序。是否可以对列表进行排序?
答案 0 :(得分:4)
为了对给定的“列表列表”sapply()
进行排序,您可以尝试将[[
与提取运算符order()
一起使用,以从列表中检索数据。这些用于调用a[order(sapply(a, `[[`, i = "day"))]
#[[1]]
#[[1]]$day
#[1] 1
#
#[[1]]$text
#[1] "bar"
#
#
#[[2]]
#[[2]]$day
#[1] 2
#
#[[2]]$text
#[1] "quux"
# ...
:
sapply()
正如this comment中所述,这也可以通过在a[order(sapply(a, function(x) x$day))]
中使用匿名函数来实现:
sortBy <- function(a, field) a[order(sapply(a, "[[", i = field))]
sortBy(a, "day")
当OP在函数定义中使用时,这也有效:
[[
请注意,我们需要将提取运算符$iterations
括在反引号或引号中。