Rのオブジェクト

18
Rのオブジェクト Itoshi NIKAIDO <[email protected] > 1

description

 

Transcript of Rのオブジェクト

Page 1: Rのオブジェクト

RのオブジェクトItoshi NIKAIDO <[email protected]>

1

Page 2: Rのオブジェクト

Rはすべてがオブジェクトvector, matrix, 関数...ひとつのクラスに属する

2

Page 3: Rのオブジェクト

そもそもオブジェクトとは変数やシンボルを介してメモリのデータへアクセスしたい言語から直接メモリにアクセスするといろいろと面倒

特別なデータ構造を決めておきオブジェクトとして定義しておくそのオブジェクトにシンボルや変数を介してアクセスすれば楽

3

Page 4: Rのオブジェクト

Rオブジェクトにはデータ型があるinteger, double, logical, complex, character, raw

4

Page 5: Rのオブジェクト

あれ? numeric は?Rオブジェクトにはデータ型以外の概念がある → mode

5

Page 6: Rのオブジェクト

modeSはデータ型を mode と呼んでいたらしいSとの互換のため。mode がある

type mode

logical logical

integer numeric

double numeric

complex complex

character character

ユーザが意識するのはここ

6

Page 7: Rのオブジェクト

type mode storage mode

logical logical logical

integer numeric integer

double numeric double

complex complex complex

character character character

storage modeメモリ上ではどのようなデータ型で保存しているのか?メモリ上では numeric を区別しなければならない

typeof() mode() storage.mode()

ほかの言語からデータにアクセスする場合はストレージモードが重要になる

7

Page 8: Rのオブジェクト

オブジェクトは属性を持つ成分の名前、次元、所属するクラス、時系列属性

8

Page 9: Rのオブジェクト

オブジェクトは属性を持つ成分の名前、次元、所属するクラス、時系列属性など

names()dimnames()

dim() class() tsp()

オブジェクトの構造: str()オブジェクトの属性: attributes()

9

Page 10: Rのオブジェクト

オブジェクトはデータ構造を表現するオブジェクトをひとまとまりにして、まとめて操作したいvector, matrix, list, data.frame...

10

Page 11: Rのオブジェクト

次元数と異なるタイプを混ぜられるかで分類できるRで基本となる4つのデータ構造

3 2 4 1vector

1D

2D

same types differential types

...

3 2 4 1matrix

...2 0 5 31 1 7 3...

3 A 4 G ...

3 A 4 C ...2 T 5 G1 G 7 C...

data frame

list

c(3,2,4,1) list(3,”A”,4,”G”)

matrix( c(3,2,1,2,0,1,4,5,7,1,3,3), nrow = 3)

data.frame( first = c(3,2,1), first.base = c("A", "T", "G"), second = c(4,5,7), second.base = c("C", "G", "C"))

11

Page 12: Rのオブジェクト

カテゴリカル変数を表現するためのデータ構造統計言語らしいデータ構造 factor

男女、年代、クラス分けなどカテゴリを扱いたいこの水準に文字列の名前を使いたい

水準を数値で表現してしまうと、誤って数値計算してしまう恐れがある特別な水準を表現するデータ構造として factor が用意されている

12

Page 13: Rのオブジェクト

factor class であり、labels 属性を持つオブジェクトfactorの構造

R> sex <- factor(c("female", "male", "female", "female"))R> sex[1] female male female femaleLevels: female male

## level 数R> nlevels(sex)[1] 2R> 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

Page 14: Rのオブジェクト

いつのまにか factor になる。factor のなにが嬉しいかfactorが苦手?

> R は character を factor へ強制変換したがる

- データフレームに変換したときdata.frame(stringsAsFactors = default.stringsAsFactors)

- テキストファイルからデータを入力したときread.table(stringsAsFactors = TRUE)

> Factor に慣れたほうが嬉しいことがたくさんある

関数やモデル式が factor をカテゴリカル変数として認識してよい具合に処理してくれる

14

Page 15: Rのオブジェクト

オブジェクト指向プログラミング自分でオブジェクトを定義したい

R のオブジェクト指向は歴史的経緯で3種類もある...これから覚えるならR5だけ覚えればよい (すごく私見)

- S3: オブジェクトの属性にクラス名を入れただけ + 総称関数。ゆるふわ。

- S4:クラスやメソッドを厳密に定義できるようになった! でも値渡し...黒歴史なので、Bioconductor のパッケージ作らない人は 忘れてよい (また私見)

- R5: いわゆる普通のオブジェクト指向 (R2.12以降)オブジェクトを参照渡しできる!オブジェクト作成後に変更できる = mutable なオブジェクト普通のオブジェクト指向ができる! (関数言語っぽさがなくなる)

15

Page 16: Rのオブジェクト

説明していないこと加筆予定

いろいろなオブジェクト

- 言語オブジェクト: 文字列から式を作る、あるいはその逆- 予約オブジェクト: lazy evaluation を実現する- 表現式オブジェクト: 文の集まり。文はシンボルの集まり

16

Page 17: Rのオブジェクト

Rのオブジェクトとはなにか?

まとめ

Rはすべてがオブジェクト

- オブジェクトの型- データ型、mode, storage.mode

- オブジェクトのデータ構造- オブジェクト指向プログラミング

17

Page 18: Rのオブジェクト

参考資料論文、オンラインドキュメント、書籍

• The R Language Definition

• Rプログラミングマニュアル

• Rの基礎とプログラミング技法

• R言語逆引きハンドブック

18