为什么complete.cases
或anyNA
都不对第1行返回FALSE?根据他们的文档,看来他们应该...我看错文档了吗?
csv<-data.frame(c(100,50,100),c(1,1,1),c(NA,12,NA))
csv$complete<-apply(csv,1,function(x){x[1]==100 && x[2]==1 && complete.cases(x)}) #check that column_1==100, and column_2=1, and no missing values in the row
csv$complete2<-apply(csv,1,function(x){x[1]==100 && x[2]==1 && anyNA(x, recursive = FALSE)})
> csv
c.100..50..100. c.1..1..1. c.NA..12..NA. complete complete2
1 100 1 NA TRUE TRUE
2 50 1 12 FALSE FALSE
3 100 1 NA TRUE TRUE
最佳答案
您所见的第一个明显异常表示无法理解&&
和&
之间的差异。给匿名函数一个3元素向量,complete.cases
返回第一行:
complete.cases( c(100,1,NA) )
[1] TRUE TRUE FALSE
&&
函数仅处理赋予它的每个矢量的第一项,因此它对第一行返回TRUE。可以说警告在这里可能是适当的。如果您想要某种可以测试NA
缺失的东西,而它恰好是正在考虑的向量,那么我会使用all( !is.na(.))
csv$complete<-apply(csv,1,function(x){x[1]==100 && x[2]==1 && all(!is.na((x)) )})
csv$complete2<-apply(csv,1,function(x){x[1]==100 && x[2]==1 && anyNA(x, recursive = FALSE)})
> csv
c.100..50..100. c.1..1..1. c.NA..12..NA. complete complete2
1 100 1 NA FALSE TRUE
2 50 1 12 FALSE FALSE
3 100 1 NA FALSE TRUE
anyNA应该被否定为“!”如果(从上下文看来)您希望complete2的所有值也都是FALSE。