2013-08-20 27 views
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循環檢查。是否有解決這個問題的單線解決方案?

回答

3

您可以使用identical測試,apply環和which查明:

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

注意,在矩陣中的值存儲爲整數,所以你需要指定的測試向量。

+0

需要注意的是,如果你不** **處理整數而是用浮漂,你可以使用'all.equal'或'cgwtools :: approxeq'避免機器精度的問題會更好。 –

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) 
相關問題