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