在 R 中使用 lappy 时如何处理 NA

How to deal with NA when using lappy in R

我有一个数据框 err 由 796 行和 54432 列组成

我必须检查值不超过 20 和 -20 的列。

这是我的方法:

do.call(cbind, (lapply(err, function(x) if((all(x<20)  & all(x>-20))) return(x) )))

我在所有列中都有 NA 值,在我得到

Error in if ((all(x < 20) & all(x > -20))) return(x) :
  missing value where TRUE/FALSE needed

我使用 !is.na 将命令更新为:

 do.call(cbind, (lapply(err, function(x) if(!is.na(all(x<20)  & all(x>-20))) return(x) )))

但在这种情况下,所有列都会被报告,过滤器不起作用。

有什么帮助吗?

使用apply

err[apply(err, 2, function(x) min(x,na.rm=T) > -20 & max(x,na.rm=T) < 20)]

因为我没有示例 df,请检查这是否适合您:

do.call("cbind", lapply(err, function(x) if(min(x, na.rm=T) > -20  & max(x, na.rm=T) < 20) return(x) ))