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 重ループである可能性があります。この問題に対する 1 行の解決策はありますか?

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 に答える