0

考虑以下矩阵:

MAT <- matrix(nrow=3,ncol=3,1:9)
     [,1] [,2] [,3]
[1,]    1    4    7
[2,]    2    5    8
[3,]    3    6    9

如果我提供的向量与MAT. 因此,如果我提供c(2,5,8),我应该取回 2。我不确定如何做到这一点;我知道的最接近的事情是which用来查找矩阵中单个数字的位置。for如果给定的向量与矩阵中的一行匹配,另一种方法可能是非常慢的四重循环检查。这个问题有没有一条线的解决方案?

4

2 回答 2

3

您可以使用identical测试、apply循环和which识别:

which(apply(MAT,1,function(x) identical(x,c(2L,5L,8L))))
[1] 2

请注意,矩阵中的值存储为整数,因此您需要在要测试的向量中指定它。

于 2013-08-20T11:20:48.280 回答
2

您可以apply对每一行使用一个简单的匹配函数,然后使用它which来查找行号:

search_vec = c(2, 5, 8)

vec_matches = apply(MAT, 1, function(row, search_vec) all(row == search_vec), search_vec)
row_num = which(vec_matches)
于 2013-08-20T11:20:45.150 回答