如何在矩阵上使用which()
函数,以使其返回条件为TRUE
且使用%in%
运算符的条件的矩阵坐标?< / p>
通常,我只使用arr.ind
函数的which()
参数。
mat <- matrix(nrow = 10, ncol = 10, data = 0)
mat[5,3] <- 7
which(mat==7, arr.ind = T)
这将返回mat中用于验证条件的每个元素的行和列。
但是,如果条件不是使用==
而是使用%in%
,则这似乎不起作用。
mat[4,7] <- 3
which(mat%in%c(3,7),arr.ind = T)
与is.element
相同:
which(is.element(mat,c(3,7)),T)
如何获取验证%in%
条件的矩阵的行和列?
答案 0 :(得分:0)
正如@akrun在他的评论中提到的那样,您可以对一组输入运行sapply()
进行检查。还有另一种有效的方法可以帮助解释为什么%in%
与==
的工作方式不同:
当您使用==
检查单个值时,R将返回矩阵对象,但是当您使用%in%
时,R将返回逻辑值的向量(真和假)
> class(mat == 3)
[1] "matrix"
> class(mat %in% 3)
[1] "logical"
因此arr.ind=T
的行为有所不同,因为它处理两种不同的数据类型。如果您希望使用与arr.ind=T
选项相同的形式,但是使用%in%
,则可以使用原始矩阵中的行数和列数将逻辑向量转换回矩阵:
> which(matrix(mat%in%c(3,7), nrow=nrow(mat), ncol = ncol(mat)), arr.ind=TRUE)
row col
[1,] 5 3
[2,] 4 7
这也与您的==
示例保持相同的标签。