如何查看矩阵内是否存在矢量。矢量将是大小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 不同。
答案 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