根据R中的内部列表变量对列表列表进行排序

时间:2018-11-12 15:36:52

标签: r list sorting vector

我使用R中的向量创建了一个列表列表(例如parentList)。parentList由100个列表childList1childList2组成,依此类推。每个这样的childList都包含一个元素列表(grandChildVariable1grandChildVariable2等)。除parentList之外,所有列表和变量均未命名。

我想基于每个parentList的第二个元素(grandChildVariable2)对childList进行排序。我可以使用parentList[[2]][2]来获取此变量的值。但是我不太确定如何对整个列表进行排序。

我目前正尝试将其排序如下: sorted_list <- parentList[order(sapply(parentList,'[[',2))],但它仅拾取第二个列表元素childList2并返回以下错误:unimplemented type 'list' in 'orderVector1'

2 个答案:

答案 0 :(得分:1)

我认为这应该有效。首先提取值,然后使用它们对父级列表进行排序要容易一些。

childList1 <- list(grandChildVariable1 = 1,
               grandChildVariable2 = 10)
childList2 <- list(grandChildVariable1 = 1,
               grandChildVariable2 = 30)
childList3 <- list(grandChildVariable1 = 1,
               grandChildVariable2 = 20)
parentList <- list(childList1, childList2,childList3)

x <- sapply(parentList, function(x) x[[2]])

orderedParentList <- parentList[order(x)]
str(orderedParentList)

答案 1 :(得分:0)

我能够找出unimplemented type 'list' in 'orderVector1'问题的根本原因。原因是某些childList元素为NULL。当我确认parentList不包含NULL时,我能够正确完成排序。

使用sorted_list <- parentList[order(sapply(parentList,'[[',2))]可以得到预期的正确输出,而Cleland给出的答案也可以解决问题。