「2012-06-12 ベクトルの要素にベクトル」で不思議がっているが??
「R では,ベクトルの添え字はベクトルで与えることができる。また,同じ要素を何回も重複して取り出すこともできるし,重複を許すからもとの要素数より多くの要素数を取り出すこともできる。」ということだが,どこが不思議なのかわからない。
> x <- 11:15
> x[3]
[1] 13
> x[c(3, 3, 1)]
[1] 13 13 11
> i <- c(2, 3, 1, 2, 4, 5, 4, 2, 2, 1)
> x[i]
[1] 12 13 11 12 14 15 14 12 12 11
? "[" を見れば,"When indexing arrays by [ a single argument i can be a matrix with as many columns as there are dimensions of x; the result is then a vector with elements corresponding to the sets of indices in each row of i." と書いてある。
だから,行列の場合は行・列を示す2つの数値を二列に持つ行列で,行列の要素を取り出すことができるのである。
> (x <- matrix(11:22, 3, 4))
[,1] [,2] [,3] [,4]
[1,] 11 14 17 20
[2,] 12 15 18 21
[3,] 13 16 19 22
> (ij <- matrix(c(1,3, 2,4, 3,2, 3,4), byrow=TRUE, nc=2))
[,1] [,2]
[1,] 1 3
[2,] 2 4
[3,] 3 2
[4,] 3 4
> x[ij]
[1] 17 21 16 22
3次元配列では,行・列・層を表す3つの数値を3列に持つ行列で,配列の要素を取り出すことができるのである。
> (x <- array(11:34, dim=c(2, 3, 4)))
, , 1
[,1] [,2] [,3]
[1,] 11 13 15
[2,] 12 14 16
, , 2
[,1] [,2] [,3]
[1,] 17 19 21
[2,] 18 20 22
, , 3
[,1] [,2] [,3]
[1,] 23 25 27
[2,] 24 26 28
, , 4
[,1] [,2] [,3]
[1,] 29 31 33
[2,] 30 32 34
> (ijk <- matrix(c(1,3,2, 2,1,4, 2,2,2, 2,3,1), byrow=TRUE, ncol=3))
[,1] [,2] [,3]
[1,] 1 3 2 # i=1, j=3, k=2 で,対応する要素x[1,3,2] の21が取り出されるということ
[2,] 2 1 4
[3,] 2 2 2
[4,] 2 3 1
> x[ijk]
[1] 21 30 20 16
全ては,help に書いてある。
※コメント投稿者のブログIDはブログ作成者のみに通知されます