使用列表元素的内容对列表元素进行子设置

问题描述

我有一个名为nested_list的嵌套列表。

nested_list <- list(B.Al = list(ABIBAL_emmeanByKAPPA_mergedAlgo_mergedRun_mergedData = structure(c(0.739,651,91.589,82.353),.Dim = c(1L,4L),.Dimnames = list("KAPPA",c("Testing.data","Cutoff","Sensitivity","Specificity")))),OA.Al = list(ABIBAL_emmeanByKAPPA_mergedAlgo_mergedRun_mergedData = structure(c(0.632,654,77.57,92.157),B.Ca = list(ABIBAL_emmeanByKAPPA_mergedAlgo_mergedRun_mergedData = structure(c(0.47,556,90.654,50.98),"Specificity")))))

nested_list的元素是B.AlOA.AlB.Canested_list$B.Alnested_list$OA.Alnested_list$B.Ca也是列表。

class(nested_list)返回"list"
class(nested_list$B.Al)返回"list"

列表nested_list$B.Alnested_list$OA.Alnested_list$B.Ca中的唯一元素是矩阵(即nested_list$B.Al$ABIBAL_emmeanByKAPPA_mergedAlgo_mergedRun_mergedData)。该矩阵有一个标记为“ Testing.data”的列。

我想确定nested_list$B.Al$ABIBAL_emmeanByKAPPA_mergedAlgo_mergedRun_mergedDatanested_list$OA.Al$ABIBAL_emmeanByKAPPA_mergedAlgo_mergedRun_mergedDatanested_list$B.Ca$ABIBAL_emmeanByKAPPA_mergedAlgo_mergedRun_mergedData中哪个具有最高的“ Testing.data”值,并且我想返回一个列表,其中仅包含最高。

在此示例中,nested_list$B.Al$ABIBAL_emmeanByKAPPA_mergedAlgo_mergedRun_mergedData[1] = 0.739。
nested_list$OA.Al$ABIBAL_emmeanByKAPPA_mergedAlgo_mergedRun_mergedData[1] = 0.632。
nested_list$B.Ca$ABIBAL_emmeanByKAPPA_mergedAlgo_mergedRun_mergedData[1] = 0.47。

因此,B.Al的“ Testing.data”值最高。因此,我想返回以下列表;

result <- list(B.Al = list(ABIBAL_emmeanByKAPPA_mergedAlgo_mergedRun_mergedData = structure(c(0.739,"Specificity")))))

解决方法

从每个列表中提取'Testing.data'的值,使用which.max获取最大值的索引,并将其用作nested_list的子集。

nested_list[which.max(sapply(nested_list,function(x) x[[1]][,'Testing.data']))]

#$B.Al
#$B.Al$ABIBAL_EMmeanByKAPPA_mergedAlgo_mergedRun_mergedData
#      Testing.data Cutoff Sensitivity Specificity
#KAPPA        0.739    651      91.589      82.353