2017-06-16 60 views
0

如何将lapply函数构造为通过索引提取特定对象?我有一个列表清单。我现在想要获得列表中的每个第2,4和5个元素,并将它们放入数据框中。我想最简单的方法是使用lapply,只是得到的条目是这样的:通过lapply过滤R中的对象列表

list <-lapply(ll, function(x) { x[[2]]; x[[4]]; x[[5]] } 

但是,因为它似乎是行不通的。

回答

0

这将工作:

ll <- list(as.list(1:10), 
      as.list(11:20), 
      as.list(21:30)) 

library(magrittr) 

output1 <- ll %>% sapply(function(x){c(x[[2]],x[[4]],x[[5]])}) %>% t %>% as.data.frame 
# or with base syntax: 
output2 <- as.data.frame(t(sapply(ll,function(x){c(x[[2]],x[[4]],x[[5]])}))) 
    # V1 V2 V3 
    # 1 2 4 5 
    # 2 12 14 15 
    # 3 22 24 25 

你的函数返回最后一次操作,而你的情况是``X [[5]]`的结果。你之前做的2个操作都丢失了。

0

不知道你想要什么这个data.frame的样子,但你可以

lapply(ll, `[`, c(2,4,5)) 

提取2,4,5元,如果你想将这些成排,你可以这样做

do.call("rbind",lapply(ll, `[`, c(2,4,5))) 

如果你想让他们成为列,你可以做

data.frame(sapply(ll, `[`, c(2,4,5)))