在R-'is.element()'条件中将'with'与矩阵一起使用

时间:2019-01-22 10:28:42

标签: r logical-operators which

如何在矩阵上使用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%条件的矩阵的行和列?

1 个答案:

答案 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

这也与您的==示例保持相同的标签。