3.5 参照・アクセス(Access Operators)
変数の中の値を参照する方法は変数型により多少異なりますが、基本的には参照演算子またはアクセス演算子と呼ばれる [ や $ を用います。
3.5.1 [ 演算子
[ 演算子はベクトル型系の要素を参照するための演算子です。例えば \(5\) 番目の値を参照するには以下のようにします。
x <- c(1:10)
x## [1] 1 2 3 4 5 6 7 8 9 10
x[5]## [1] 5
マトリクス型では、行・列・セルの三通りの参照が可能です。
x <- matrix(c(1:12), nrow = 3)
x## [,1] [,2] [,3] [,4]
## [1,] 1 4 7 10
## [2,] 2 5 8 11
## [3,] 3 6 9 12
x[1, ]## [1] 1 4 7 10
x[, 1]## [1] 1 2 3
x[2, 3]## [1] 8
アレイ型でも同様の参照が可能です。ただし、マトリクス型とは異なり次元が絡んできますので、表示は少しややこしくなります。以下の \(2 \times 2\) の \(4\) 次元アレイで説明します。
x <- array(c(1:16), dim = c(2, 2, 4))
x## , , 1
##
## [,1] [,2]
## [1,] 1 3
## [2,] 2 4
##
## , , 2
##
## [,1] [,2]
## [1,] 5 7
## [2,] 6 8
##
## , , 3
##
## [,1] [,2]
## [1,] 9 11
## [2,] 10 12
##
## , , 4
##
## [,1] [,2]
## [1,] 13 15
## [2,] 14 16
第 \(1\) 次元を参照します。
x[, , 1]## [,1] [,2]
## [1,] 1 3
## [2,] 2 4
第 \(1\) 次元の \(1\) 行目を参照します。
x[1, , 1]## [1] 1 3
第 \(1\) 次元の \(1\) 列目を参照します。
x[,1 , 1]## [1] 1 2
全次元の \(1\) 行目を参照します。参照結果は列が各次元になる点に注意してください。
x[1, , ]## [,1] [,2] [,3] [,4]
## [1,] 1 5 9 13
## [2,] 3 7 11 15
全次元の \(1\) 列目を参照します。行の参照と同様に参照結果は列が各次元になります。
x[, 1, ]## [,1] [,2] [,3] [,4]
## [1,] 1 5 9 13
## [2,] 2 6 10 14
全次元の \(1\) 行 \(1\) 列目を参照します。
x[1, 1, ]## [1] 1 5 9 13
3.5.2 $ 演算子
$ 演算子はデータフレーム型やリスト型の要素を参照するための演算子です。
x <- data.frame(blood = c("A", "B", "A", "O", "A"), age = c(18, 25, 22, 35, 19))
xx$blood## [1] "A" "B" "A" "O" "A"
さらに要素内を参照するには前述の [ 演算子と組み合わせます。
x$blood[3]## [1] "A"
##### Operators ############################################################### リスト型を $ 演算子で参照するの場合は 要素が names 属性を持っていることが前提です。以下のリスト型変数では $ 表示の後ろに要素名が表示されいている blood, data が $ 演算子で参照可能です。
x <- list(blood = c("A", "B", "AB", "O"), c("M", "F"),
data = data.frame(blood = c("A", "B", "A", "O", "A"),
age = c(18, 25, 22, 35, 19)))
str(x)## List of 3
## $ blood: chr [1:4] "A" "B" "AB" "O"
## $ : chr [1:2] "M" "F"
## $ data :'data.frame': 5 obs. of 2 variables:
## ..$ blood: chr [1:5] "A" "B" "A" "O" ...
## ..$ age : num [1:5] 18 25 22 35 19
要素名が表示されていない二番目の要素を参照するには [[ 演算子を用います。
x[[2]]## [1] "M" "F"
さらに要素内の値を参照する場合は前述のデータフレーム型同様に [ 演算子を用います。
x$blood[2]## [1] "B"
x[[2]][1]## [1] "M"