根据嵌套矩阵中特定列的 colMeans 重新排序嵌套列表(索引)

Reordering nested lists (index) according to colMeans of specific column in nested matrices

我正在处理带有双精度矩阵列表的嵌套列表,motherlist。

m1<-matrix(rep(2+0.2*rnorm(3),5),5)
n1<-matrix(rep(5+2*rnorm(3),10),10)
p1<-matrix(rep(10+2*rnorm(3),8),8)
colnames(p1)<-colnames(m1)<-colnames(n1)<-c("a","b","c")
daughterlistl1<-list(m1,p1,n1)
daughterlistl2<-list(p1,n1,m1)
daughterlist3<-list(n1,m1,p1)
motherlist<-list(daughterlistl1, daughterlistl2, daughterlist3)

我想在每个嵌套矩阵 (motherlist[[m]][[n]][3]) 中取 "c" 列的均值或 colMeans,然后在嵌套列表中对这些矩阵重新排序矩阵 (motherlist[[m]][[n]]) (reorder n) 根据得到的均值从小到大,使得第三列均值较小的矩阵最先出现,即得到索引1 (motherlist[[m] ][[1]]), 依此类推,对于所有 m 个列表。

我能够在一个嵌套列表中获得索引的顺序

order(round(sapply(motherlist[[1]], colMeans), 3)[3,])

但不在 motherlist[[1]] 中对它们重新排序,也不对 motherlist 中的所有 m 进行迭代。

是否可以在嵌套列表中重新分配索引?如何? 如何使用有序的嵌套列表重新创建母列表?

motherlist <- lapply(motherlist,function(y){
  y[order(sapply(y,function(x){mean(x[,3])}))]
})

应该适用于您的整个母亲名单。缺少的功能缺少,当你有索引时,是使用普通括号:

motherlist[[1]][order(round(sapply(motherlist[[1]], colMeans), 3)[3,])]

给你妈妈列表的第一个列表你想要的。你只需要再次 lapply 来循环你的 motherlist