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))
x
x$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"