一人R勉強会 第3回
- 作者: U.リゲス,石田基広
- 出版社/メーカー: シュプリンガー・ジャパン(株)
- 発売日: 2006/10/22
- メディア: 単行本
- 購入: 14人 クリック: 114回
- この商品を含むブログ (43件) を見る
第2章の続きから
データ構造とかの話になってきた
2.8データ型
オブジェクトのデータ型については、is.で始まる関数を使えば型が確認できる
なかなか便利ですね。
2.9.1ベクトル(Vecotor)
ベクトルの要素は任意のデータ型で構わないが、しかしベクトル内部の要素は全て同じデータ型でなければならない
初め意味が分からなかったが、サンプルコードで理解した。
あるベクトルは要素として任意のデータ型を持つことが可能だが、その要素は全て同じデータ型である必要がある。
というか、同じ要素でない時は強制的に変換されるようだ。
- ベクトルを作るにはc()
- ベクトルの長さを調べるにはlenght()
- 転置をとるにはt()
- ベクトルの要素には名前を付けることができる
- c(hogehoe="fugafuga")的な
- 連続する数を作成するにはseq()
- 単純なものなら":"を使えばよい
- 同一オブジェクトの繰り返しにはrep()
ベクトルでは要素ごとに計算が行われる
これ重要ですね。
基本は要素同士の計算。
- %*%は行列積を計算するため。
内積の計算例を見て気づいたんだが、ベクトルは列ベクトルで表現されているようだ。
単純な出力に惑わされてはいけない。
> a <- c(1,2,3) > a [1] 1 2 3 > t(a) [,1] [,2] [,3] [1,] 1 2 3 > t(t(a)) [,1] [1,] 1 [2,] 2 [3,] 3
ベクトルの添字については重要そうなもの
- 複数の添字はベクトルで表現可能
- 数字の前にマイナス記号を付けると、その添字番号の要素を除去
- TRUEは要素の「選択」、FALSEは「除外」を意味する
- 空の角括弧"[]"はベクトルの全ての要素を置き換える
2.9.2行列(matrix)
行列はmatrix()で作成する。
何かいろいろオプションあるけど、使うときに確認すればいいや。
自分でRのコードを書いていて実際にはまったことが書かれていた。
例えば行列から取り出された要素のデータ構造は、もはや行列ではなく、ベクトルかもしれない。
まさに。
そして対処法
これを防ぐには"[]"による添字指定に「常に」引数drop=FALSEを加えて指定sるとよい。
らしい。
> a <- matrix(1:6,3) > a [,1] [,2] [1,] 1 4 [2,] 2 5 [3,] 3 6 > a[1,1] [1] 1 > str(a[1,1]) int 1 > a[1,1,drop=FALSE] [,1] [1,] 1 > str(a[1,1,drop=FALSE]) int [1, 1] 1
おお、確かに違う。
多分頭に入れておいた方がいいこと
行列は、次元に関する属性付きのベクトルで表現されている
数学での考え方とは違い、Rでは行列がベクトルの特殊な場合であって、その逆ではないのである。
2.9.3配列(array)
配列は任意の数の次元を持ち、array()によって生成される。
らいいですが、例を見てもよく分からん。
3次元配列の例なんだけど、何だこれ。
ああ、3次元構造を表しているのか。
確かに
3次元以上の配列を作成してもあまり実用性がない。構造の見通しがたちまち効かなくなるからである。
2.9.4リスト(list)
リストは再起的に定義され、異なったデータ構造オブジェクトを要素として含み得る。
えーと、リストは、ベクトルと違って各要素毎のデータ型が一環している必要がないということかな。
- list()でリスト作成
- 要素へのアクセスは"[[]]"
- 要素を名前で指定している時は"$"演算子でアクセスできる。
実はリストも内部ではベクトルで表現されているので、ベクトルと同様に演算子"[]"でリストの複数の要素に同時にアクセスすることができる。
でた、またベクトル!
とはいえ、
演算子"[]"が返すのはリストであって、ベクトルではない。
このあたりは、実際に使ってつまづかないと実感が持てないなぁ
2.9.5データフレーム(data frame)
- 関数data.frame()でデータフレームを生成
- 要素は全て同じ長さにする
データフレームは、Rの標準的なデータ構造である!多くの関数類が引数つぃてデータフレームを想定している。
確かにエラーでdata.frame()が云々と出ていた気がしなくもない。
例を見ると、csvファイルを読み込んだときと同じ感じですね。
変数間の関連を指定しやすい方法として関数subset()がある
こいつはすげー
values_1D[which(values_1D$VOLUME > 0),]
こう書いていたのが、
subset(values_1D, VOLUME > 0)
こう書ける、と。
スマートですね。
あと何か色々関数があるみたいだけど、実際に使って行かないとわからないなぁ。
正規S4オブジェクトの説明もあった。
そういえばここに書かれている"@"演算子をgarchFit関数で使った記憶がある。