2012-06-23 33 views
3

我有一个名单列表作为条目,就像这样:递归提取派的对象列表中的

A <- list(scores1 = list(a = "a", b = "b"), scores2 = list(a = "c", b = "d"), scores3 = list(a = "e", b = "f")) 
B <- list(scores1 = list(a = "aa", b = "bb"), scores2 = list(a = "cc", b = "dd"), scores3 = list(a = "ee", b = "ff")) 
C <- list(scores1 = list(a = "aaa", b = "bbb"), scores2 = list(a = "ccc", b = "ddd"), scores3 = list(a = "eee", b = "fff")) 
ABC <- list(A, B, C) 

我能得到的元素scores1如下:

a1 <- lapply(ABC, "[", "scores1") 

这给了我

[[1]] 
[[1]]$scores1 
[[1]]$scores1$a 
[1] "a" 

[[1]]$scores1$b 
[1] "b" 

[[2]] 
[[2]]$scores1 
[[2]]$scores1$a 
[1] "aa" 

[[2]]$scores1$b 
[1] "bb" 

[[3]] 
[[3]]$scores1 
[[3]]$scores1$a 
[1] "aaa" 

[[3]]$scores1$b 
[1] "bbb" 

现在,我真正想要的是什么是在对象“一”,所以我正在寻找一个电话,让我

"a" 
"aa" 
"aaa" 

我可以在循环中做到这一点,但这似乎效率很低。我如何提取这些值?我曾尝试

lapply(lapply(ABC, "[", "scores1"), "[", "a") 

但只返回

[[1]] 
[[1]]$<NA> 
NULL 

[[2]] 
[[2]]$<NA> 
NULL 

[[3]] 
[[3]]$<NA> 
NULL 

什么是做这种正确的方法是什么?

回答

4

我觉得你被“[”和“[[”之间的差异绊倒了。使用“[[”为您提供由“scores1”索引的内容而不是子列表。然后,您可以访问名为“A”的元素的内容:

a1 <- lapply(ABC, "[[", "scores1") 
sapply(a1, "[[", "a") 
#[1] "a" "aa" "aaa" 
+0

伟大的,正是我需要的,帮助和解释的感谢,这是正确的标志! –