2

次のような3つの列を持つRの配列があります。

>x
[,1]     [,2] [,3]
V1 7.803550 0.000000    0
V2 7.842899 0.000000    0
V3 7.310273 0.000000    0
V4 7.230438 0.000000    0
V5 6.582147 1.097024    0
V6 9.364152 0.000000    0

私の配列スライスでは、各行から異なる列が必要なので、必要なもののインデックスは次のとおりです。

rows<-1:6
cols<-c(1,1,1,2,3,1)

適切な値を持つベクトルを取得する代わりに、Rで適切な配列スライスを取得しようとすると、

> t
      V1       V2       V3       V4       V5       V6 
7.803550 7.842899 7.310273 0.000000 0.000000 9.364152 

選択したすべての行に対して特定の列が出力される6x6の出力マトリックスを取得します

> t
       [,1]     [,2]     [,3]     [,4] [,5]     [,6]
V1 7.803550 7.803550 7.803550 0.000000    0 7.803550
V2 7.842899 7.842899 7.842899 0.000000    0 7.842899
V3 7.310273 7.310273 7.310273 0.000000    0 7.310273
V4 7.230438 7.230438 7.230438 0.000000    0 7.230438
V5 6.582147 6.582147 6.582147 1.097024    0 6.582147
V6 9.364152 9.364152 9.364152 0.000000    0 9.364152

forループなしでベクトル内の目的のインデックスペアを取得するにはどうすればよいですか?

Davidの提案によると、私が期待していたコードは次のようになります。

t<-x[rows,cols]
4

2 に答える 2

10

どうですか:

x[cbind(rows, cols)]

なぜこれが機能するのか?"["を読んでください。(ロビンソンのサプリ戦略よりも速いと思います。)

于 2012-08-30T04:14:58.443 に答える
1

おそらくこれ以上のことはできない

sapply(1:length(rows), function(i) x[rows[i], cols[i]])
于 2012-08-30T03:59:34.440 に答える