R 列表子集的子集

R 列表子集的子集,r,list,sublist,R,List,Sublist,在R中,我有一个列表,由12个子列表组成,每个子列表本身由5个子发布者组成,如下所示 在本例中,我想为每个子列表提取info MSD 我可以提取每种类型的级别统计信息 lapply(letters, '[[', "statistics") 这很有效。它为每个列表提供了子列表统计信息中包含的所有值 然而,我想再往下一层,因为我对其他数据不感兴趣,比如MSerror,Df。。。。。只有MSD 我试过了 lapply(letters, '[[', "statistics", "MSD") 还有许多

在R中,我有一个列表,由12个子列表组成,每个子列表本身由5个子发布者组成,如下所示

在本例中,我想为每个子列表提取info MSD

我可以提取每种类型的级别统计信息

lapply(letters, '[[', "statistics")
这很有效。它为每个列表提供了子列表统计信息中包含的所有值 然而,我想再往下一层,因为我对其他数据不感兴趣,比如MSerror,Df。。。。。只有MSD

我试过了

lapply(letters, '[[', "statistics", "MSD")
还有许多人没有成功

如果我只想要第一个子列表,它将与

letters[[1]][["statistics"]][["MSD"]]
但是,我必须这样做:

letters[[1]][["statistics"]][["MSD"]]
letters[[2]][["statistics"]][["MSD"]]
letters[[3]][["statistics"]][["MSD"]]
这是我想要避免的一个时间问题


谢谢您的帮助。

我们可以使用lambda/匿名函数

lapply(letters, function(x) x[["statistics"]][["MSD"]])
这个函数的好处是,如果我们有多个嵌套元素,我们不必调用n lappy,而且应该更快

或者使用地图

另外,关于如果列表中没有某些元素,这将不起作用的说法


这确实行不通。但是,它不能与声称有效的解决方案一起工作。

一个选项是嵌套lappy:

lapply(lapply(letters, '[[', "statistics"),`[[`,"MSD")

与@akrun的方法相比,这种方法的好处是,即使列表中的某些元素没有$statistics$MSD项,它也会起作用。

我忘了提到,我看到了获取子列表的帖子。但不是关于如何降低一个级别并获得子列表如果“MSD”始终存在,那么您也可以使用for循环,这样您就有了字母[[i]][[statistics]][[MSD]]
set.seed(24)
lst1 <- replicate(3,  list(statistics = list(MSD = rnorm(20))))
names(lst1)[2] <- "Hello"
lapply(lapply(letters, '[[', "statistics"),`[[`,"MSD")