识别矩阵是否在相同位置具有NA(逻辑)

时间:2019-07-31 14:20:45

标签: r function matrix

我想确定两个矩阵在同一位置是否具有NA。

设置: 我们有三个矩阵。我想运行一个函数,告诉我mat1和mat2在相同位置具有NA,并且告诉我mat1(和mat3)与mat2在不同位置具有NA

mat1 <- matrix(nrow=2, ncol =2, data =c(NA,0,0,NA))
mat2 <- matrix(nrow=2, ncol =2, data=c(NA,0,0,NA))
mat3 <- matrix(nrow=2, ncol=2, data = c(NA,0,0,0))

2 个答案:

答案 0 :(得分:5)

比较所有元素的NA状态:

> all(is.na(mat1) == is.na(mat2))
[1] TRUE
> all(is.na(mat1) == is.na(mat3))
[1] FALSE

在函数中,我会这样做:

> nanana = function(m1, m2){!any(is.na(m1) != is.na(m2))}

我已经颠倒了逻辑,以便any可以停止检查是否发现任何差异。如果使用all,则必须遍历每个元素。我不确定这种短路是否在R中,但是它可以为您节省一到两毫秒。

> nanana(mat1, mat2)
[1] TRUE
> nanana(mat1, mat3)
[1] FALSE

答案 1 :(得分:2)

我们可以编写一个函数,比较两个矩阵中NA个元素的位置

identical_NA_matrix <- function(m1, m2) {
   identical(which(is.na(m1), arr.ind = TRUE), which(is.na(m2), arr.ind = TRUE))
}

identical_NA_matrix(mat1,mat3)
#[1] FALSE
identical_NA_matrix(mat1,mat2)
#[1] TRUE
相关问题