R语言:无需中间变量判断列表数据框行名是否含NA
解决方法
可以直接通过R的函数式编程实现,无需额外创建test变量,同时直接返回TRUE/FALSE的判断结果:
Base R 实现
利用sapply()遍历列表中的每个dataframe,结合any()和is.na()完成判断,最后用外层any()确认是否存在符合条件的情况:
# 直接返回逻辑判断结果 any(sapply(listdf, function(df) any(is.na(rownames(df)))))
如果需要嵌入if-else逻辑:
if (any(sapply(listdf, function(df) any(is.na(rownames(df)))))) { TRUE } else { FALSE }
或者封装成函数方便复用:
check_na_rownames <- function(listdf) { any(sapply(listdf, function(df) any(is.na(rownames(df))))) } # 调用函数获取结果 check_na_rownames(listdf)
Tidyverse 实现
使用purrr包的some()函数,语法更简洁,专门用于判断列表中是否存在至少一个元素满足条件:
library(purrr) some(listdf, ~any(is.na(rownames(.x))))
逻辑说明
- 内层
any(is.na(rownames(df))):单独判断单个dataframe的行名是否包含NA,返回单个逻辑值 - 外层的
any()(或purrr::some()):遍历整个列表,只要有一个dataframe满足行名含NA的条件,就返回TRUE,否则返回FALSE
内容的提问来源于stack exchange,提问作者Tristan
相关产品推荐
相关产品推荐

