我有一个按名称对嵌套列表进行子集化的问题。 我有一个示例列表,如:
test_list <- list(a = list(A1 = c(1,2,3), A2 = c(4,5,6)),
b = c(7,8,9),
c = list(C1 = c(10,11,12), C2 = list(C21 =c(13,14,15))))
我想基于像lnames <-
c('c','C2','C21')
这样的向量来对值进行子集化。我能想到这样做的方法是使用:
exp_str <- paste0('test_list','$',paste0(lnames, collapse = '$'))
eval(parse(text = exp_str))
但这对我来说似乎有点笨拙。我只是想知道是否有一种功能性方法可以像使用reduce
函数一样。
答案 0 :(得分:2)
你可以做到
test_list[[lnames]]
# [1] 13 14 15
在?Extract
帮助页面中对此进行了一些隐秘描述。
[[
可以递归地应用于列表,因此,如果单个索引i
是长度为p
的向量,则alist[[i]]
相当于alist[[i1]]...[[ip]]
在列表中提供除最终索引结果之外的所有结果。