r-列表子集的子集



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

列表和子列表

在这个例子中,我想提取每个子列表的信息"MSD"。

我可以使用提取每个级别的"统计信息">

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

效果很好。它为我提供了子列表"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"]])

这个函数的好处是,如果我们有多个嵌套元素,我们不必调用nlapply,并且应该更快


或使用map

library(tidyverse)
map(letters, ~ .x[["statistics"]][["MSD"]])

此外,关于如果list中没有一些元素,这将不起作用的说法,

set.seed(24)
lst1 <- replicate(3,  list(statistics = list(MSD = rnorm(20))))
names(lst1)[2] <- "Hello"

的确,它不会起作用。然而,它不适用于声称有效的解决方案。

一个选项是嵌套的lapply:

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

与@akrun的方法相比,这种方法的好处是,即使列表中的某些元素没有$statistics$MSD项,它也能工作,在这种情况下,这种方法可能与此无关。

最新更新