2016-07-20 27 views
1

これはおそらくばかばかしいことだと確信していますが、どのような理由であれ関連ドキュメントはどこにも見つかりません。配列内の複数の値が配列のインデックスに一致する値

私は、m1と呼び出す多次元配列と、v1と呼ばれる値のベクトルを持っています。

v1に含まれる各要素は、m1のどこかに存在することを知りたいと思います。問題は、配列のインデックス付けの観点からその位置を知りたいということです。私がした場合

3 1 1 
1 2 1 

:ように私はいくつかの関数fの出力を希望

m1< array(c(3,9,110,2,36,0.01,-9,11,95,67,31,-2,2.5,10,1,49),dim=c(4,2,2)) 
v1<-c(110,36) 

> m1 

, , 1 

    [,1] [,2] 
[1,] 3 36 
[2,] 9 0.5 
[3,] 110 -9 
[4,] 2 11 

, , 2 

    [,1] [,2] 
[1,] 95 2.5 
[2,] 67 10 
[3,] 31 1 
[4,] -2 49 

> v1 
[1] 110 36 

(m1は、V1)私に何かを与えるために:

ので、(簡略化した例が)言いますwhichでこれを行うと、which(m1==v1,arr.ind=T)のような処理をしますが、一致する値のベクトルとは動作しません(思われます)。

それ以外の場合、私はmatch - match(v1,m1)を使用することができますが、これはベクトル形式(正しい用語でない場合はお詫び申し上げます)ではありません。上記の例では3と5です。

私が探している出力を得るにはどうすればよいですか?あるいは、ベクトル形式の位置を配列インデックス形式で同じに変換する簡単な方法はありますか?上記の場合は簡単ですが、複数のディメンションを扱う場合は頭痛になります。あなたの例からm1v1を使用して

答えて

2

vapply(X = v1, 
     FUN = function(x) which(x == m1, arr.ind = TRUE), 
     FUN.VALUE = integer(length(dim(m1))) 
     ) 

これは、各列が値の1のためのインデックスを持っている

 [,1] [,2] 
[1,] 3 1 
[2,] 1 2 
[3,] 1 1 

を返します。

関連する問題