从R中的列表中提取所有TRUE元素

时间:2018-03-06 13:58:30

标签: r

我有一个清单:

lst <- list(list(c(TRUE, TRUE, TRUE, TRUE),
                        c(FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE),
                        c(TRUE, TRUE)),
           list(c(FALSE, FALSE),
                        c(FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE),
                        c(TRUE, TRUE,TRUE)))

我想只用它们的索引提取TRUE元素。

结果必须是:

[[1]][[1]]
[1] TRUE TRUE TRUE TRUE
[[1]][[3]]
[1] TRUE TRUE
[[2]][[3]]
[1] TRUE TRUE TRUE

1 个答案:

答案 0 :(得分:1)

我们循环嵌套的list用序列重命名,然后在all为真时提取

lapply(lst, function(x) {x1 <- setNames(x, seq_along(x)); x1[sapply(x1, all)] })
#[[1]]
#[[1]]$`1`
#[1] TRUE TRUE TRUE TRUE

#[[1]]$`3`
#[1] TRUE TRUE


#[[2]]
#[[2]]$`3`
#[1] TRUE TRUE TRUE

或者modify_depth中的另一个选项是purrr,如果不满足条件会导致空列表元素

library(purrr)
lst %>%
    modify_depth(2, ~ .x[all(.x)])