r-在appply内部的if()之后处理NULL



apply返回一个包含许多NULL条目的列表。我使用的代码很长,所以我用一个简单的例子来重现这个问题。

# Generate data.
df <- data.frame(a= c(1,2, NA, 6),
b= c(1, 7, 3, 7))
# Return only columns that have NAs.
my_list <- apply(df, 2, function(col_i){
if(any(is.na(col_i))){
return(col_i)
}})

运行此程序可为我们提供

my_list
$a
[1]  1  2 NA  6
$b
NULL

我的问题是,我得到了很多Null条目,所以我无法处理结果。我如何(a(避免申请返回NULL条目或(b(丢弃my_list中的所有NULL条目?

所以预期的输出是

my_list
$a
[1]  1  2 NA  6

同样,我使用的实际代码比这更复杂。因此,请不要建议使用类似df[ , !complete.cases(t(df)), drop= FALSE]的东西,它也会返回包含任何缺失的列。我的问题不是关于如何获得有任何遗漏的列,而是关于如何处理apply中的NULL条目。我想把if的部分放在apply里面。

每个函数都必须返回一些东西,所以你不能真正避免返回一些东西但你可以删除它们:

Filter(length, apply(df, 2, function(col_i) if(any(is.na(col_i))) return(col_i)))
#$a
#[1]  1  2 NA  6

最新更新