向量是否存在于矩阵中?

时间:2015-09-02 05:49:49

标签: r matrix vector

如何查看矩阵内是否存在矢量。矢量将是大小2.我有一个方法,但我想要一些矢量化/更快。

dim(m)
[1] 30  2

x = c(1, -2)

for(j in 1:nrow(m)){
    if ( isTRUE(as.vector(x[1]) == as.vector(m[j,1])) && as.vector(x[2] == as.vector(m[j,2]) )) { 
print(TRUE) 
  }
}

注意, x = c(1,-2)与矩阵中的 -2,1 不同。

2 个答案:

答案 0 :(得分:2)

如果我们将matrix(' m')的行与' x'进行比较。我们可以复制' x'' x' (x[col(m)])要使长度相同,请比较(!=),得到rowSums。如果特定行的总和为0,则表示vector中的所有值都匹配' m'的那一行。否定(!)将0转换为TRUE,将所有其他值转换为FALSE

indx1 <- !rowSums(m!=x[col(m)])

如果我们需要使用apply的解决方案,我们可以使用identical

indx2 <- apply(m, 1, identical, y=x)
identical(indx1, indx2)
#[1] TRUE

如果这只能找到一个TRUE/FALSE,我们可以将any换成&#39; indx1&#39;或者&#39; indx2&#39;。

数据

x <- c(1, -2)
set.seed(24)
m <- matrix(sample(c(1,-2,3,4), 30*2, replace=TRUE), ncol=2)

答案 1 :(得分:1)

尝试

m<-matrix(rnorm(60),30)
x<-m[8,]
m[9,]<-c(x[2],x[1]) # to prove 1,-2 not same -2,1

apply(m,1,function(n,x) all(n==x),x=x)
 [1] FALSE FALSE FALSE FALSE FALSE FALSE FALSE  TRUE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
[24] FALSE FALSE FALSE FALSE FALSE FALSE FALSE

如果你只需要一个T / F使用任何()你

any(apply(m,1,function(n,x) all(n==x),x=x))
[1] TRUE

如果使用akrun的数据运行此代码

x <- c(1, -2)
set.seed(24)
m <- matrix(sample(c(1,-2,3,4), 30*2, replace=TRUE), ncol=2)

any(apply(m,1,function(n,x) all(n==x),x=x))
[1] TRUE