日々のつれづれ

不惑をむかえ戸惑いを隠せない男性の独り言

listはいろいろ放り込める

listって、かなり変わっている。でも便利。
エクセルっぽく言うと、一つのファイルに複数のワークシートがある感じ。

オブジェクトにオブジェクトをいろいろ放り込めます。

> x <- rep(1:3,each=2) # vector
> y <- matrix(12:1,nrow=2,dimnames=list(1:2,LETTERS[1:6])) # matrix
> z <- data.frame("x"=1:2,"y"=letters[1:2],"z"=factor(1:2)) # data.frame
> (a <- list("x"=x,"y"=y, "z"=z, "a"="This is a list."))
$x
[1] 1 1 2 2 3 3
$y
A B C D E F
1 12 10 8 6 4 2
2 11 9 7 5 3 1
$z
x y z
1 1 a 1
2 2 b 2
$a
[1] "This is a list."

こんな風に、x はvector、y はmatrix、z はdata.frameの3種類を同じlistに放り込んでいます。
更に、オブジェクトaは文章(文字列)です。

データへのアクセスはdata.frameと同じようにnames属性を使ってアクセスできます。

> str(a)
List of 4
$ x: int [1:6] 1 1 2 2 3 3
$ y: int [1:2, 1:6] 12 11 10 9 8 7 6 5 4 3 ...
..- attr(*, "dimnames")=List of 2
.. ..$ : chr [1:2] "1" "2"
.. ..$ : chr [1:6] "A" "B" "C" "D" ...
$ z:'data.frame': 2 obs. of 3 variables:
..$ x: int [1:2] 1 2
..$ y: Factor w/ 2 levels "a","b": 1 2
..$ z: Factor w/ 2 levels "1","2": 1 2
$ a: chr "This is a list."
> names(a)
[1] "x" "y" "z" "a"
> a[1] # list の座標を指定する
$x
[1] 1 1 2 2 3 3
> a[[1]] # names属性がない場合の呼び出し
[1] 1 1 2 2 3 3
> a$"x" # names 属性を指定しても良い
[1] 1 1 2 2 3 3

オブジェクトを少なくできるので、ls()したときの見栄えが良いので重宝します。