R减少了List的子集

时间:2018-02-21 16:39:01

标签: r

我有一个按名称对嵌套列表进行子集化的问题。 我有一个示例列表,如:

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函数一样。

1 个答案:

答案 0 :(得分:2)

你可以做到

test_list[[lnames]]
# [1] 13 14 15

?Extract帮助页面中对此进行了一些隐秘描述。

  

[[可以递归地应用于列表,因此,如果单个索引i是长度为p的向量,则alist[[i]]相当于alist[[i1]]...[[ip]]在列表中提供除最终索引结果之外的所有结果。