首页 > 解决方案 > 确定矩阵是否在相同位置具有 NA(逻辑)

问题描述

我想确定两个矩阵是否在同一个位置有 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))

标签: rfunctionmatrix

解决方案


比较所有元素的 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

推荐阅读