R 在appply中的if()之后处理NULL
我遇到的情况是,R 在appply中的if()之后处理NULL,r,null,apply,R,Null,Apply,我遇到的情况是,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
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)
}})
我的问题是,我得到了许多Null
条目,因此无法处理结果。我如何(a)避免申请返回NULL
条目,或(b)放弃my_列表中的所有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
每个函数都必须返回某些内容,因此您无法真正避免返回某些内容,但您可以删除它们:
Filter(length, apply(df, 2, function(col_i) if(any(is.na(col_i))) return(col_i)))
#$a
#[1] 1 2 NA 6
我会将else
分支添加到if
,可能会返回NA
或0
。首先,不要在data.frame上运行apply
。请改用laaply
。其次,只需先过滤数据,然后对其进行操作,例如,df[colSums(is.na(df))]
将只返回您需要的列need@DavidArenburg请阅读我明确声明的问题,该问题与列中的NA
无关。实际情况会使问题变得不必要的复杂,因此我用一个简单的例子再现了这个问题。此外,我认为没有理由不使用apply。它是在Ronak Shah的帮助下工作的。你看不到它并不意味着它不存在。@Davidernburg我的代码运行并回答了我的研究问题。我认为没有理由改变“一个运行的系统”。请解释您的选择,而不是简单地写“从不…”。我会在if
中添加一个else
分支,可能返回NA
或0
。首先,不要在data.frame上运行apply
。请改用laaply
。其次,只需先过滤数据,然后对其进行操作,例如,df[colSums(is.na(df))]
将只返回您需要的列need@DavidArenburg请阅读我明确声明的问题,该问题与列中的NA
无关。实际情况会使问题变得不必要的复杂,因此我用一个简单的例子再现了这个问题。此外,我认为没有理由不使用apply。它是在Ronak Shah的帮助下工作的。你看不到它并不意味着它不存在。@Davidernburg我的代码运行并回答了我的研究问题。我认为没有理由改变“一个运行的系统”。请解释你的选择,而不是简单地写“从不…”。