R中的嵌套列表:根据子列表的名称/位置提取和组合值

时间:2015-10-02 14:38:42

标签: r list nested

我将数据存储在多级嵌套列表中。此列表可能如下所示

my.list = list()

my.list[[1]] = list("naive" = list("a"=c(1,1)) )
my.list[[2]] = list("naive" = list("b"=c(2,1)) )
my.list[[3]] = list("naive" = list("c"=c(3,1)) )
my.list[[4]] = list("naive" = list("d"=c(4,1)) )
my.list[[5]] = list("naive" = list("e"=c(5,1)) )

现在我想对存储的值进行一些操作,比如选择二维向量的第一个元素并将它们组合到另一个向量中。当然,这可以像下面这样做

foo = c(my.list[[1]][["naive"]][[1]][1],
        my.list[[2]][["naive"]][[1]][1],
        my.list[[3]][["naive"]][[1]][1],
        my.list[[4]][["naive"]][[1]][1],
        my.list[[5]][["naive"]][[1]][1])

但如果我有超过5个一级的子列表,这真的很尴尬。我对K my.list[[K]][["naive"]][[1]][1] K=1:5中的mapply循环有同样的感觉。

由于Reduce第二级子列表的存在,使用整齐的sapply"naive"foo = c(15,5)提供的类似问题的建议无法直接应用。

有人可以帮助我们提供一个聪明且有指导意义的解决方案,根据这种多级列表结构存储的值可以连接,相互添加还是两者兼而有之?在上面的示例中,最终期望的结果可以是为所有向量添加相应的分量,并将结果存储在新的2-d向量中,在这种情况下将是img { width:100px; height:100px; background: url(http://goo.gl/vyAs27) no-repeat scroll 0 0; }。你的回答对我很有帮助。

1 个答案:

答案 0 :(得分:2)

是的,在这种情况下,sapply肯定能帮到你:

sapply(my.list, function(x) x[["naive"]][[1]][1])

如果需要,您可以在此处或sapply / lapplynaive向量的索引进行概括。