1

あいまいな質問のタイトルで申し訳ありませんが、私はより具体的な何かを理解することができませんでした。

私は3x2のマトリックスを持っていますc

> c
     [,1] [,2]
[1,]    1    2
[2,]    1    3
[3,]    2    3

それが重要ですncol(c) == 2

私もマトリックスを持っていますind

> ind
      [,1] [2] [,3] [,4]
[1,]    2    2    2    1
[2,]    1    1    2    2
[3,]    2    2    2    1

nrow(c) == nrow(ind)、および行列の値が1と2であることが重要ですind(cの各行の列インデックスのように)

私が取得したいのは、次のようなa同じ薄暗い行列です:inda[i,j] == c[i,ind[i,j]]

> a
      [,1] [2] [,3] [,4]
[1,]    2    2    2    1
[2,]    1    1    3    3
[3,]    3    3    3    2

たとえば、以下を使用する場合など、あまり包括的でない状況でも同様のことができnrow(c) == 1ますapply

 > apply(c,2,function(x){return(matrix(x[ind], nrow(ind)))})

mapplyを使用して2つのリストを反復処理する方法があることは知っていますが、

1)行列を行のリストとして表すための最良の方法がわかりません2)このソリューションを醜くします

私がここで説明したことを達成するための最良の方法は何ですか?

4

2 に答える 2

4

救助へのマトリックス索引付け!

> c.mat <- matrix(c(1,1,2,2,3,3), ncol=2)
> ind <- matrix(c(2,1,2,2,1,2,2,2,2,1,2,1), ncol=4)
> matrix(c.mat[cbind(as.vector(row(ind)), as.vector(ind))], ncol=ncol(ind))
     [,1] [,2] [,3] [,4]
[1,]    2    2    2    1
[2,]    1    1    3    3
[3,]    3    3    3    2
于 2012-05-12T21:39:20.623 に答える
0
f<-function(x,row1){ 
   for(i in 1:length(x)){
     x[i]=cc[i,ind[i,row1]]
    }
   x
}
a=apply(cc,1,f,nrow(a))

このように適用できます。注:ccあなたのc matrix

于 2012-05-12T21:58:11.603 に答える