Advertisement

More Related Content

Slideshows for you(20)

Advertisement

Rのオブジェクト

  1. Rのオブジェクト Itoshi NIKAIDO <dritoshi@gmail.com> 1
  2. Rはすべてがオブジェクト vector, matrix, 関数... ひとつのクラスに属する 2
  3. そもそもオブジェクトとは 変数やシンボルを介してメモリのデータへアクセスしたい 言語から直接メモリにアクセスするといろいろと面倒 特別なデータ構造を決めておきオブジェクトとして定義しておく そのオブジェクトにシンボルや変数を介してアクセスすれば楽 3
  4. Rオブジェクトにはデータ型がある integer, double, logical, complex, character, raw 4
  5. あれ? numeric は? Rオブジェクトにはデータ型以外の概念がある → mode 5
  6. mode Sはデータ型を mode と呼んでいたらしい Sとの互換のため。mode がある type mode logical logical integer numeric double numeric complex complex character character ユーザが意識する のはここ 6
  7. storage mode メモリ上ではどのようなデータ型で保存しているのか? メモリ上では numeric を区別しなければならない type mode storage mode logical logical logical integer numeric integer double numeric double complex complex complex character character character ほかの言語から データにアクセ スする場合はス トレージモード typeof() mode() storage.mode() が重要になる 7
  8. オブジェクトは属性を持つ 成分の名前、次元、所属するクラス、時系列属性 8
  9. オブジェクトは属性を持つ 成分の名前、次元、所属するクラス、時系列属性など names() dim() class() tsp() dimnames() オブジェクトの構造: str() オブジェクトの属性: attributes() 9
  10. オブジェクトはデータ構造を表現する オブジェクトをひとまとまりにして、まとめて操作したい vector, matrix, list, data.frame... 10
  11. Rで基本となる4つのデータ構造 次元数と異なるタイプを混ぜられるかで分類できる vector list 3 2 4 1 ... 3 A 4 G ... 1D c(3,2,4,1) list(3,”A”,4,”G”) matrix data frame 3 2 4 1 ... 3 A 4 C ... 2D 2 0 5 3 2 T 5 G 1 1 7 3 1 G 7 C ... ... matrix( data.frame( c(3,2,1,2,0,1,4,5,7,1,3,3), first = c(3,2,1), nrow = 3 first.base = c("A", "T", "G"), ) second = c(4,5,7), second.base = c("C", "G", "C") ) same types differential types 11
  12. 統計言語らしいデータ構造 factor カテゴリカル変数を表現するためのデータ構造 男女、年代、クラス分けなどカテゴリを扱いたい この水準に文字列の名前を使いたい 水準を数値で表現してしまうと、誤って数値計算してしまう恐れがある 特別な水準を表現するデータ構造として factor が用意されている 12
  13. factorの構造 factor class であり、labels 属性を持つオブジェクト R> sex <- factor(c("female", "male", "female", "female")) R> sex [1] female male female female Levels: female male ## level 数 R> nlevels(sex) [1] 2 R> is(sex) [1] "factor" "integer" "oldClass" "numeric" "vector" R> class(sex) [1] "factor" R> str(sex) Factor w/ 2 levels "female","male": 1 2 1 1 内部的にはラベルが整数に割り当てられている 13
  14. factorが苦手? いつのまにか factor になる。factor のなにが嬉しいか > R は character を factor へ強制変換したがる - データフレームに変換したとき data.frame(stringsAsFactors = default.stringsAsFactors) - テキストファイルからデータを入力したとき read.table(stringsAsFactors = TRUE) > Factor に慣れたほうが嬉しいことがたくさんある 関数やモデル式が factor をカテゴリカル変数として認識して よい具合に処理してくれる 14
  15. 自分でオブジェクトを定義したい オブジェクト指向プログラミング R のオブジェクト指向は歴史的経緯で3種類もある... これから覚えるならR5だけ覚えればよい (すごく私見) - S3: オブジェクトの属性にクラス名を入れただけ + 総称関数。 ゆるふわ。 - S4:クラスやメソッドを厳密に定義できるようになった! でも値渡し... 黒歴史なので、Bioconductor のパッケージ作らない人は 忘れてよい (また私見) - R5: いわゆる普通のオブジェクト指向 (R2.12以降) オブジェクトを参照渡しできる! オブジェクト作成後に変更できる = mutable なオブジェクト 普通のオブジェクト指向ができる! (関数言語っぽさがなくなる) 15
  16. 加筆予定 説明していないこと いろいろなオブジェクト - 言語オブジェクト: 文字列から式を作る、あるいはその逆 - 予約オブジェクト: lazy evaluation を実現する - 表現式オブジェクト: 文の集まり。文はシンボルの集まり 16
  17. まとめ Rのオブジェクトとはなにか? Rはすべてがオブジェクト - オブジェクトの型 - データ型、mode, storage.mode - オブジェクトのデータ構造 - オブジェクト指向プログラミング 17
  18. 参考資料 論文、オンラインドキュメント、書籍 • The R Language Definition • Rプログラミングマニュアル • Rの基礎とプログラミング技法 • R言語逆引きハンドブック 18
Advertisement