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