以下の内容はhttp://blog.livedoor.jp/splus_r/archives/2006-03.htmlより取得しました。


今日はリストを学びます。

前回までに、ベクトルとマトリクスを学びました。
基本的にベクトルは一次元のデータで、マトリクスは二次元のデータです。
そして、ベクトルとマトリクスには、共通の制限がありました。
ベクトルやマトリクスの各々の要素は、全て同じデータのタイプでなければいけませんでした。
例えば、文字と数値データが混在してはいけないわけです。

一方、リストはどんなデータでも要素として組み入れることが出来ますし、リストの中にリストを作って入れ子構造にすることも出来ます。

それでは、さっそくリストを作ってみましょう。

> s <- 1
> v <- c(1:10)
> m <- rbind(c(1,2),c(3,4))
> str <- "Hello!"
> myList <- list(s,v,m,str)
> myList
[[1]]
[1] 1

[[2]]
[1] 1 2 3 4 5 6 7 8 9 10

[[3]]
[,1] [,2]
[1,] 1 2
[2,] 3 4

[[4]]
[1] "Hello!"

最初に定義した4つのオブジェクトがリストの[[1]]から[[4]]までに収まりましたね。
ベクトルやマトリクスと同様に要素に名前をつけることも出来ます。

> names(myList) <- list("scalar", "vector", "matrix", "string")
> myList
$scalar
[1] 1

$vector
[1] 1 2 3 4 5 6 7 8 9 10

$matrix
[,1] [,2]
[1,] 1 2
[2,] 3 4

$string
[1] "Hello!"

リストの各要素の取り出し方ですが、ベクトルとマトリクスとはやや違います。

> myList["string"]
$string
[1] "Hello!"

> myList[["string"]]
[1] "Hello!"

> myList[4]
$string
[1] "Hello!"

> myList[[4]]
[1] "Hello!"

ベクトルやマトリクスの場合は[]で指定してやればよかったのですが、リストの場合はさらに[[]]があります。
一重括弧[]の場合は、取り出される中身も要素がひとつのリストですが、二重括弧[[]]の場合は、もともとのデータがそのまま取り出されます。

この辺のデータのタイプに関する理解は重要なので、次回に重点的に勉強します。



今日はマトリクス(行列)を学びましょう。

前回、勉強したベクトルをつなげて作ります。

まず、ベクトルを列でつなげる場合はcbindを使います。
cはもちろんcolumnで列の意味です。

> x <- cbind(1:3,c(4,5,6))
> x
[,1] [,2]
[1,] 1 4
[2,] 2 5
[3,] 3 6

行でつなげるrbindもあります。
rはrowで行の意味です。

> y <- rbind(1:3,c(4,5,6))
> y
[,1] [,2] [,3]
[1,] 1 2 3
[2,] 4 5 6

行列の要素を取り出すには、何行目の何列目かを指定します。

> x[3,2]
[1] 6

次のようにして行全て、列全てを取り出すことも出来ます。

> y[2,]
[1] 4 5 6

> y[,2]
[1] 2 5

また、行と列に名前をつけることが出来ます。

> rname <- c("rA","rB","rC")
> cname <- c("cA","cB")
> dimnames(x) <- list(rname,cname)
> x
cA cB
rA 1 4
rB 2 5
rC 3 6
> dimnames(x)
[[1]]
[1] "rA" "rB" "rC"

[[2]]
[1] "cA" "cB"

行の名前を表すベクトルと、列の名前を表すベクトルを作って、それを行列にdimnamesを使って、リストの形で渡します。

リストに関しては次回勉強しますが、ここで簡単に説明しておくと、リストはその要素に数値でもベクトルでも行列でも格納できるオブジェクトです。

さあ、ベクトルと行列に関して、大体分かって来ましたね。

日本語で出版されているS-PlusR関連の本はほとんど全て買いましたが、この本が圧倒的に分かりやすいです。

私はこの本を一読した後に、Rの仕組みが一通り理解できて、使いこなせるようになりました。

S-PlusRを勉強したい方は、何はともあれ、この一冊の購入を強くお勧めします。



追記:改訂版が出ています。



以上の内容はhttp://blog.livedoor.jp/splus_r/archives/2006-03.htmlより取得しました。
このページはhttp://font.textar.tv/のウェブフォントを使用してます

不具合報告/要望等はこちらへお願いします。
モバイルやる夫Viewer Ver0.14