我对R中的矩阵有一个非常愚蠢的问题:如何检查R中的矩阵是否已满?
例如:
m1 = matrix(NA, 2, 2)
m1[,1] = c("a", "b")
所以此时此矩阵应如下所示:
a NA
b NA
我尝试使用is.null()
检查它是否为空,然后返回False
,这就是预期的结果。但是我想知道R中是否有一个函数可以判断矩阵中的每个条目是否都有赋值(无论它是什么,整数,字符,只要它有赋值)?
提前致谢!
答案 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