我有一个嵌套的命名数据框列表,如下所示:
mylist2 <- list(
list(df1.a = data.frame(replicate(2,sample(0:1,5,rep=TRUE))), df2.b = data.frame(replicate(2,sample(0:1,5,rep=TRUE)))),
list(df3.c = data.frame(replicate(2,sample(0:1,5,rep=TRUE))), df4.d = data.frame(replicate(2,sample(0:1,5,rep=TRUE)))),
list(df5.e = data.frame(replicate(2,sample(0:1,5,rep=TRUE))), df6.f = data.frame(replicate(2,sample(0:1,5,rep=TRUE)))))
我运行测试(不重要的是什么类型的测试)并且它产生一个字符向量,告诉我这个列表中哪些数据帧很重要:
test
[1] "df1.a" "df5.e"
使用此字符向量从嵌套列表中提取这些数据帧的最有效方法是什么?该测试仅显示第二个列表的名称,因此nestedlist[test]
不起作用。
答案 0 :(得分:1)
这是一个可重复的示例,包括使用嵌套list
s的示例数据:
# Sample data
lst <- list(
list(df1.a = 1, df2.b = 2),
list(df3.c = 3, df4.d = 4),
list(df5.e = 5, df6.f = 6))
test <- c("df1.a", "df5.e");
ret <- lapply(lst, function(x) x[names(x) %in% test])
ret[sapply(ret, length) > 0];
#[[1]]
#[[1]]$df1.a
#[1] 1
#
#
#[[2]]
#[[2]]$df5.e
#[1] 5
答案 1 :(得分:1)
正如OP提到的那样,它是一个嵌套的list
,我们可以遍历最初的list
,然后用list
lapply(mylist2, '[', test)
或使用tidyverse
library(tidyverse)
map(mylist2, ~ .x %>%
select(test))
基于更新的数据集:
Filter(length, lapply(mylist2, function(x) x[intersect(test, names(x))]))