如何检查R中的矩阵是否已满?

时间:2017-06-28 15:51:25

标签: r matrix

我对R中的矩阵有一个非常愚蠢的问题:如何检查R中的矩阵是否已满?

例如:

m1 = matrix(NA, 2, 2)
m1[,1] = c("a", "b")

所以此时此矩阵应如下所示:

a NA
b NA

我尝试使用is.null()检查它是否为空,然后返回False,这就是预期的结果。但是我想知道R中是否有一个函数可以判断矩阵中的每个条目是否都有赋值(无论它是什么,整数,字符,只要它有赋值)?

提前致谢!

2 个答案:

答案 0 :(得分:3)

is.null测试一个对象是否为空;它没有查看矩阵内部。实际上,因为length(NULL) == 0,你不能在矩阵单元格中出现空值。当您尝试将NULL分配给一个单元格时,您会看到此错误:

m1[1,1] <- NULL
Error in m1[1, 1] <- NULL : 
  number of items to replace is not a multiple of replacement length

如果您想检查矩阵中是否有任何NA,您可以使用与anyNA相同的any(is.na(...)),但速度更快:

  

泛型函数anyNA可能实现任何(is.na(x))   更快的方式(特别是对于原子矢量)。

anyNA(m1)
# [1] TRUE

!anyNA(m1)          # negation tells you if it's full, here means not full
# [1] FALSE

答案 1 :(得分:1)

如果m1的长度等于非NA元素的数量,则完整。在这种情况下,

length(m1) == sum(!is.na(m1))
#[1] FALSE