测试矩阵的行是否等于给定的向量

时间:2017-03-20 21:14:14

标签: r matrix vector

如何在下面的代码中构造一个函数来评估矩阵mat的任何行是否等于向量vec

set.seed(000)
mat <- matrix(rnorm(20),4,5)
vec <- c(1.3297993, -0.9285670,  0.7635935, -0.2992151,  0.4356833)
mat[3,]
vec
mat==vec

另外,如何确定vec中是否至少有一个mat值?

注意:mat == vec应该等于TRUE,即mat-vec == 0 mat-vec <toltol = 1e-5

2 个答案:

答案 0 :(得分:3)

首先,由于floating point trap(从第9页开始),您的示例无法正常工作。

这应该可以解决问题:

set.seed(000)
mat <- round(matrix(rnorm(20),4,5), digits = 7)
vec <- c(1.3297993, -0.9285670,  0.7635935, -0.2992151,  0.4356833)

现在,mat[3, ] == vec是真的。

如果您想知道mat的一行是否与vec匹配,请尝试:

apply(mat, 1, function(x) identical(x, vec))

要确定vec中是否至少有一个mat值,您可以这样做:

length(vec[which(vec %in% mat)])

结果反映了矢量和矩阵之间找到的匹配数。

答案 1 :(得分:2)

这样的事情:

compare <- function(mat, vec, tol=1e-5)
{
    ok <- apply(mat, 1, function(v) {
        all(abs(v - vec) < tol)
    })
    any(ok)
}


v <- 1:5
m <- matrix(rnorm(25), nrow=5)
compare(m, v)
# FALSE

m[1,] <- v
compare(m, v)
# TRUE