r-使用purrr::keep提取带有NA的列表元素名称



我想提取列表中NA元素的names

library(tidyverse)
mlist <- lst(p1 = data.frame(a = c(1, NA)),
p2 = NA,
p3 = data.frame(b = c(NA, "test")),
p4 = NA,
p5 = c(1, 2, NA))
mlist
# $p1
#    a
# 1  1
# 2 NA
# $p2
# [1] NA
# $p3
#      b
# 1 <NA>
# 2 test
# $p4
# [1] NA
# $p5
# [1]  1  2 NA

我发现最简单的方法是使用base:

names(mlist)[is.na(mlist)]
#[1] "p2" "p4"

但我最初一直在尝试使用purrr::keep来实现这一点,我仍然很好奇如何实现

map(mlist, ~keep(is.na(.))) %>% names()

有什么简单的解决方案吗?

感谢

我们可以直接使用keep

library(purrr)
keep(mlist, ~ all(is.na(.x))) %>%
names
#[1] "p2" "p4"

或者另一个带管道的选项是

mlist %>%
is.na %>% 
which %>% 
names
#[1] "p2" "p4"

最新更新