gpt4 book ai didi

r - 检查向量是否包含在 R 中的矩阵中

转载 作者:行者123 更新时间:2023-12-03 23:32:52 25 4
gpt4 key购买 nike

我不敢相信我花了这么长时间才弄明白,我仍然无法弄明白。

我需要保留一组向量,然后检查某个向量是否在该集合中。我尝试将列表与 %in% 结合使用,但这似乎无法正常工作。

我的下一个想法是创建一个矩阵和 rbind 向量,但现在我不知道如何检查向量是否包含在矩阵中。 %in 似乎比较集合而不是确切的行。同样似乎适用于相交。

非常感谢帮助!

最佳答案

你的意思是这样吗:

wantVec <- c(3,1,2)
myList <- list(A = c(1:3), B = c(3,1,2), C = c(2,3,1))
sapply(myList, function(x, want) isTRUE(all.equal(x, want)), wantVec)
## or, is the vector in the set?
any(sapply(myList, function(x, want) isTRUE(all.equal(x, want)), wantVec))

我们可以用矩阵做类似的事情:
myMat <- matrix(unlist(myList), ncol = 3, byrow = TRUE)
## As the vectors are now in the rows, we use apply over the rows
apply(myMat, 1, function(x, want) isTRUE(all.equal(x, want)), wantVec)
## or
any(apply(myMat, 1, function(x, want) isTRUE(all.equal(x, want)), wantVec))

或按列:
myMat2 <- matrix(unlist(myList), ncol = 3)
## As the vectors are now in the cols, we use apply over the cols
apply(myMat, 2, function(x, want) isTRUE(all.equal(x, want)), wantVec)
## or
any(apply(myMat, 2, function(x, want) isTRUE(all.equal(x, want)), wantVec))

如果你需要这样做很多,写你自己的函数
vecMatch <- function(x, want) {
isTRUE(all.equal(x, want))
}

然后使用它,例如在列表 myList 上:
> sapply(myList, vecMatch, wantVec)
A B C
FALSE TRUE FALSE
> any(sapply(myList, vecMatch, wantVec))
[1] TRUE

或者甚至包装整个事情:
vecMatch <- function(x, want) {
out <- sapply(x, function(x, want) isTRUE(all.equal(x, want)), want)
any(out)
}

> vecMatch(myList, wantVec)
[1] TRUE
> vecMatch(myList, 5:3)
[1] FALSE

编辑: 关于为什么我使用 isTRUE() 包裹 all.equal() 调用的快速评论。这是因为当两个参数 相等时, all.equal() 不返回逻辑值 ( FALSE ):
> all.equal(1:3, c(3,2,1))
[1] "Mean relative difference: 1"
isTRUE() 在这里很有用,因为它返回 TRUE 如果它的参数是 TRUE ,而它返回 FALSE 如果它是其他任何东西。

关于r - 检查向量是否包含在 R 中的矩阵中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4294130/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com