今日はリストを学びます。
前回までに、ベクトルとマトリクスを学びました。
基本的にベクトルは一次元のデータで、マトリクスは二次元のデータです。
そして、ベクトルとマトリクスには、共通の制限がありました。
ベクトルやマトリクスの各々の要素は、全て同じデータのタイプでなければいけませんでした。
例えば、文字と数値データが混在してはいけないわけです。
一方、リストはどんなデータでも要素として組み入れることが出来ますし、リストの中にリストを作って入れ子構造にすることも出来ます。
それでは、さっそくリストを作ってみましょう。
> 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!"
ベクトルやマトリクスの場合は[]で指定してやればよかったのですが、リストの場合はさらに[[]]があります。
一重括弧[]の場合は、取り出される中身も要素がひとつのリストですが、二重括弧[[]]の場合は、もともとのデータがそのまま取り出されます。
この辺のデータのタイプに関する理解は重要なので、次回に重点的に勉強します。
前回までに、ベクトルとマトリクスを学びました。
基本的にベクトルは一次元のデータで、マトリクスは二次元のデータです。
そして、ベクトルとマトリクスには、共通の制限がありました。
ベクトルやマトリクスの各々の要素は、全て同じデータのタイプでなければいけませんでした。
例えば、文字と数値データが混在してはいけないわけです。
一方、リストはどんなデータでも要素として組み入れることが出来ますし、リストの中にリストを作って入れ子構造にすることも出来ます。
それでは、さっそくリストを作ってみましょう。
> 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!"
ベクトルやマトリクスの場合は[]で指定してやればよかったのですが、リストの場合はさらに[[]]があります。
一重括弧[]の場合は、取り出される中身も要素がひとつのリストですが、二重括弧[[]]の場合は、もともとのデータがそのまま取り出されます。
この辺のデータのタイプに関する理解は重要なので、次回に重点的に勉強します。