我刚刚发现了这个新功能,在我看来它是 !is.na 的改进版本,可能包含在一个apply(df, 1)
. 我是正确的还是以下:
> a<-c(1,2,4,NA,6,8)
> identical(complete.cases(a), !is.na(a))
[1] TRUE
这并不总是正确的?
对于原子向量,complete.cases
和is.na
将是相同的。对于更复杂的对象,情况并非如此。
例如,对于一个 data.frameis.na.data.frame
将返回一个与输入相同维度的逻辑矩阵。
测试 <- data.frame(a, b =1)
is.na(test)
# a b
# [1,] FALSE FALSE
# [2,] FALSE FALSE
# [3,] FALSE FALSE
# [4,] TRUE FALSE
# [5,] FALSE FALSE
#[6,] FALSE FALSE
complete.cases(test)
# [1] TRUE TRUE TRUE FALSE TRUE TRUE
让我们采用如下的向量 r1 和矩阵/表 r2 并解释结果
> r1
[1] 11.3 10.4 NA 11.7 10.8 11.7 10.1 9.8 12.1 1.5 1.8
> r2
speed mxPH mnO2
60 medium 6.60 11.3
61 medium 6.50 10.4
62 medium 6.40 NA
63 high 7.83 11.7
64 high 7.57 10.8
65 high 7.19 11.7
66 high 7.44 10.1
67 high 7.14 9.8
68 high 7.00 12.1
69 medium 7.50 1.5
70 medium 7.50 1.8
is.na 和 complete.cases 对向量的工作方式相同
> **is.na(r1)**
[1] FALSE FALSE TRUE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
> **complete.cases(r1)**
[1] TRUE TRUE FALSE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
现在让我们看看这两个命令为二维数据提供了什么
如您所见, is.na 作用于个人价值,但 complete.cases 作用于 ROW 级别
> **is.na(r2)**
speed mxPH mnO2
60 FALSE FALSE FALSE
61 FALSE FALSE FALSE
62 FALSE FALSE TRUE
63 FALSE FALSE FALSE
64 FALSE FALSE FALSE
65 FALSE FALSE FALSE
66 FALSE FALSE FALSE
67 FALSE FALSE FALSE
68 FALSE FALSE FALSE
69 FALSE FALSE FALSE
70 FALSE FALSE FALSE
> **complete.cases(r2)**
[1] TRUE TRUE FALSE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE