为什么complete.casesanyNA都不对第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。

10-08 07:59