使用字符向量-R为命名数据帧的嵌套列表编制索引

使用字符向量-R为命名数据帧的嵌套列表编制索引,r,list,dataframe,indexing,R,List,Dataframe,Indexing,我有一个命名数据帧的嵌套列表,如下所示: 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(repl

我有一个命名数据帧的嵌套列表,如下所示:

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)))))

使用此字符向量从嵌套列表中提取这些数据帧的最有效方法是什么?测试仅显示第二个列表的名称,因此
nestedlist[test]
不起作用。

以下是一个可复制的示例,包括使用嵌套
列表的样本数据:

# 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
#示例数据

lst正如OP提到的,它是一个嵌套的
列表
,我们可以循环遍历初始的
列表
,然后使用
[

lapply(mylist2, '[', test)

或者使用
tidyverse

library(tidyverse)
map(mylist2, ~ .x %>% 
                   select(test))
更新 根据更新的数据集:

Filter(length, lapply(mylist2, function(x) x[intersect(test, names(x))]))

或者
mylist2[name(mylist2)%in%test]
,或者
mylist2[match(test,names(mylist2))]
还有:“所以像mylist2[test[1]]这样的东西是没有效率的”你怎么会这样想?噢,糟糕!我把我的示例问题简化得太多了。我实际上有一个数据帧列表。不知道如何简单地复制它,但问题是列表中的元素可能被命名为
[[5]]df1.a、[[5]]df2.b、[[6]]df3.c、[[6]]df4.d
,测试只生成嵌套列表的名称(例如,
df1.a
)。尝试使用
lappy(mylist2,[',test)
你能检查一下你的例子吗,因为我不确定这是不是模仿你的原创作品的data@akrun谢谢,现在编辑。:)非常感谢,很抱歉造成混淆。您的第一个和最后一个答案都很好。
Filter(length, lapply(mylist2, function(x) x[intersect(test, names(x))]))