我有一个向量列表,形式如下:
[[1]]
[1] 2 1.0 3.0
[[2]]
[1] 3 3 3
[[3]]
[1] 1 3.0 1.0
我希望它按照每个向量的第一个元素排序,以递减顺序排列,像这样:
[[1]]
[1] 3 3 3
[[2]]
[1] 2 1.0 3.0
[[3]]
[1] 1 3.0 1.0
我正在寻找一种解决方案,它应该像这样(当然它并不起作用):
list.sortby(function (x) x[1])
我认为您的例子不应该导致将列表的第二个元素放入结果的第一个元素中? 如果是这样,您可以使用lapply
来实现您想要的效果:
L <- list(c(2,1,3), c(3,3,3), c(1,3,1))
L
lapply(L, sort)
如果您想按照列表中每个向量的第一个值进行排序,可以按照以下方法进行:
L[order(sapply(L, function(x) x[1], simplify=TRUE), decreasing=TRUE)]
L
[[1]]
[1] 3 3 3
[[2]]
[1] 2 1 3
[[3]]
[1] 1 3 1
L <- list(c(2,1,3), c(3,3,3), c(1,3,1))
L[order(sapply(L,head,1),decreasing=T)]
# [[1]]
# [1] 3 3 3
#
# [[2]]
# [1] 2 1 3
#
# [[3]]
# [1] 1 3 1
L <- list(c(2,1,3), c(3,3,3), c(1,3,1))
idx <- as.numeric(Map(function(vec){vec[1]},L))
L[order(idx, decreasing=TRUE)]