我有一个清单:
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
答案 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)])