我有一个看起来类似于的嵌套列表
test <- list(a = list(a1 = 1:5, a2 = 6:10, a3=data.frame(a4 = letters, a5 = LETTERS)),
b = list(a1 = 11:15, a2 = 16:20, a3=data.frame(a4 = letters, a5 = LETTERS)))
我有兴趣为每个data.frame提取向量a5(可能是列表)。我知道我可以使用以下内容提取列表中的特定元素(例如数据框)
a3 <- sapply(test, '[', 'a3')
但我不确定如何在数据框中获取特定变量。
更新:
我还应该补充一点,我知道我可以在结果中使用lapply(例如lapply(a3, '[', 'a5'
)来获取数据帧,但我想知道是否有更短的方法。
答案 0 :(得分:2)
您可以尝试rlist
中的list.select
library(rlist)
list.select(test, a3$a5)
#$a
#$a[[1]]
# [1] A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
#Levels: A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
#
#
#$b
#$b[[1]]
# [1] A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
#Levels: A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
另一个使用lapply
lapply(test, function(x) {
x$a3$a5
})
答案 1 :(得分:1)
这里是map
library(tidyverse)
map(test, ~ pluck(.x$a3, "a5"))
#$a
# [1] A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
#Levels: A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
#$b
# [1] A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
#Levels: A B C D E F G H I J K L M N O P Q R S T U V W X Y Z