リスト

リストの作成

ベクトル、行列などのデータ型では、1 つの変数に 1 種類のデータ型しか保存できない。例えば、1 つが数値であれば、他の要素はすべて数値でなければならない。これに対して、リスト型はこのような制限がない。何でも保存できる。

# x をリスト型とする
x <- list()

x[[1]] <- c(3, 3, 3, 3, 3)
x[[2]] <- "I love R"

上記のようにリストを作成することは可能だが、以下の様な、一括で作ったほうがいい。

x <- list(2 + 3i, c(1:5), array(1:10, dim = c(2, 5))
x
## [[1]]
## [1] 2+3i
## [[2]]
## [1] 1 2 3 4 5
## [[3]]
##      [,1] [,2] [,3] [,4] [,5]
## [1,]    1    3    5    7    9
## [2,]    2    4    6    8   10

リストの入れ子構造も可能。

x <- list(c(1, 2, 3), array(1:6, dim = c(3, 2))
y <- list(c(4, 5, 6), x)    # リスト x をリスト y の要素とする

y
## [[1]]
## [1] 4 5 6
## 
## [[2]]
## [[2]][[1]]
## [1] 1 2 3
## 
## [[2]][[2]]
##      [,1] [,2]
## [1,]    1    4
## [2,]    2    5
## [3,]    3    6

リスト要素の取得

リストの要素を取得したい場合は、[[添字]] を用いる。たとえば、[[[1]]][3] はリストの 1 番目のデータの 3 番目の要素を示す。

x <- list(c(1, 2, 3), array(4:9, dim = c(3, 2)), c(T, F, F, T))
x
## [[1]]
## [1] 1 2 3
## 
## [[2]]
##      [,1] [,2]
## [1,]    4    7
## [2,]    5    8
## [3,]    6    9
## 
## [[3]]
## [1]  TRUE FALSE FALSE  TRUE
## 
## x[[2]]
##      [,1] [,2]
## [1,]    4    7
## [2,]    5    8
## [3,]    6    9

x[[2]][2]
## [1] 5 8

x[[2]][1]
## [1] 5

リストの名前

リストに名前をつけることができる。名前をつけると、添字の他に名前でリストの要素を取得できる様になる。

x <- list(
     mat = matrix(0, nrow = 2, ncol = 4),
     vec = c(1, 2, 3, 4),
     arr = array(0, dim = c(2, 1, 1))
)

# 添字で要素を取得
x[[2]]
## [1] 1 2 3 4

# 名前で要素を取得
x$vec
## [1] 1 2 3 4

# 名前の変更
names(x) <- c("alpha", "beta", "gamma")

x
## $alpha
##      [,1] [,2] [,3] [,4]
## [1,]    0    0    0    0
## [2,]    0    0    0    0
## 
## $beta
## [1] 1 2 3 4
## 
## $gamma
## , , 1
## 
##      [,1]
## [1,]    0
## [2,]    0
##