通过lapply过滤R中的对象列表

时间:2017-06-16 13:17:04

标签: r lapply

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

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

但这似乎不会起作用。

2 个答案:

答案 0 :(得分: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个操作都会丢失。

答案 1 :(得分:0)

不确定您希望此data.frame看起来像什么,但您可以使用

提取2,4和5个元素
lapply(ll, `[`, c(2,4,5))

如果你想把它们变成行,你可以做

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

如果您希望它们成为列,您可以

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