【问题标题】:R: Sorting list by values in nested listR:按嵌套列表中的值对列表进行排序
【发布时间】:2014-08-03 21:32:29
【问题描述】:

数据是通过类似的过程生成的:

x <- rnorm(10)
y <- c("a", "b", "c") 
# chr vectors might have varying length and contents, simplified for sake of example
data_list <- list()
for(i in 1:length(x)) {
  data_list <- append(data_list, list(list(numeric = x[i], char = y)))
}

生成列表的结构基本上是这样的:

$ :List of 2
  ..$ numeric: num 0.928
  ..$ char   : chr [1:3] "a" "b" "c"
 $ :List of 2
  ..$ numeric: num 1.4
  ..$ char   : chr [1:3] "a" "b" "c"
...

我想按数字升序对该列表进行排序,保留初始结构。

我尝试了here 解释的解决方案,但它破坏了 chr 向量的结构。

【问题讨论】:

    标签: r list sorting


    【解决方案1】:
    data_list = data_list[order(sapply(data_list, `[[`, i=1))]
    

    【讨论】:

    • 这个解决方案适用于示例数据和实际数据,这让我想知道 - agstudy 解决方案到底出了什么问题。
    • 当我们在做的时候——你能推荐一些关于应用函数的好材料吗?我一直看到他们有很大的潜力,但从来没有完全掌握他们的窍门。
    • @A.Val。我个人会使用sapply 来解决这个问题(+1)。 rappaly 用于嵌套列表深度较长的情况。
    【解决方案2】:

    例如:

    data_list[order(rapply(data_list,"numeric",f=c))]
    

    rapply intsruction 将提取所有数值,然后我们order 他们。

    【讨论】:

    • 由于某种原因,此解决方案适用于提供的示例,但当我将其应用于实际数据时会出现奇怪的错误。我会调查一下可能是什么原因造成的。
    【解决方案3】:

    还有:

    data_list[order(unlist(do.call(`c`, data_list)[c(T,F)]))]
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-03-08
      • 2022-01-14
      • 1970-01-01
      • 1970-01-01
      • 2013-02-06
      相关资源
      最近更新 更多