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