Más contenido relacionado Similar a R Language Definition 2.2 to 2.3 (20) R Language Definition 2.2 to 2.31. R
Language
Defini,on
version
2.14.2
(2012-‐02-‐29)
DRAFT
2.2
~
2.3
Tokyo.Lang.R
#1
2012/4/1
@_kohta
1
2. 2.2
AGributes
• NULLを除く全てのRオブジェクトは、データ本体とは別
にaGribute(属性)という要素を(複数)持つことができる
• 複数のaGributeは、それぞれ名前がつけられ、pairlist
の形で保持される
• aGributes(obj)でobjのaGribute一覧を見ることができ、
aGr(obj,”aGrname”)で個別aGributeを操作できる
>
obj
<-‐
kmeans(dist(iris[,1:4]),3)
>
aGributes(obj)
$names
[1]
"cluster"
"centers"
"totss"
"withinss"
"tot.withinss"
aGribute
[6]
"betweenss"
"size"
$class
[1]
"kmeans"
“class”
aGributeの取得
>
aGr(obj,"class")
[1]
"kmeans"
2
3. 2.2
AGributes
• いくつかの特殊なaGributeには、専用のアクセサ関数
が用意されていることがある
– class(),names()など
• aGr()やアクセサによるaGributeの操作ではconsistency
check(長さ、型)が行われる
>
names(obj)
<-‐
c(names(obj),"hoge")
以下にエラー names(obj)
<-‐
c(names(obj),
"hoge")
:
'names'
属性 [8]
はベクトル [7]
の長さと同じでなければなりません
>
aGr(obj,"names")
<-‐
c(names(obj),"hoge")
以下にエラー aGr(obj,
"names")
<-‐
c(names(obj),
"hoge")
:
'names'
属性 [8]
はベクトル [7]
の長さと同じでなければなりません
• Rのクラスは(S3だけでなく)aGributeの仕組みを使って
実現されている
3
4. 2.2.1
Names
• names
aGributeは、データ本体(vectorまたはlist)の
個々の要素の名前を保持する
– 名前は要素にアクセスするためのキーとしての役割も持つ
>
quan,le(iris[,1])
names
0%
25%
50%
75%
100%
4.3
5.1
5.8
6.4
7.9
データ本体(vector)
>
quan,le(iris[,1])["25%"]
25%
5.1
4
5. 2.2.1
Names
• names<-‐
(names(obj)<-‐の意。たぶん)は、names
aGributeの正しい型、長さのチェックを行う
• と書いてあるが…
>
myiris
<-‐
iris
>
names(myiris)
[1]
"Sepal.Length"
"Sepal.Width"
"Petal.Length"
"Petal.Width"
"Species"
>
names(myiris)
<-‐
c("a","b","c")
>
names(myiris)
[1]
"a"
"b"
"c"
NA
NA
>
myiris
<-‐
iris
>
names(iris)
<-‐
c(names(iris),"a")
以下にエラー names(iris)
<-‐
c(names(iris),
"a")
:
'names'
属性 [6]
はベクトル [5]
の長さと同じでなければなりません
– いつもチェックされるわけではない???
• コード読むべきかも(すみません)
5
6. 2.2.1
Names
• pairlistと1次元arrayは特別な扱いを受ける
– pairlist
objectに対しては、virtual
names
aGributeが使われる
• ??
– the
names
aGribute
is
really
constructed
from
the
tags
of
the
list
components
• tags
of
the
list
components??
– 1次元arrayについては、names
aGributeは実際には
dimnames[[1]]にアクセスする
– pairlistに対してはdimnamesのようなリスト構造のnames
aGributeではないということか?
6
7. 2.2.2
Dimensions
• dim
aGributeはarrayを表現するために用いられる
• Rのarrayのデータ本体は全て1次元配列であり、行列な
どの多次元arrayは、1次元配列をdim
aGributeに従っ
て列優先で解釈することで実現される
>
obj
<-‐
1:6
>
dim(obj)
vectorはdim
aGributeを持っていない
NULL
>
dim(obj)
<-‐
6
>
obj
1次元のdim
aGributeを付加してみる
[1]
1
2
3
4
5
6
>
dim(obj)
<-‐
c(2,3)
>
obj
[,1]
[,2]
[,3]
2次元のdim
aGributeを付加してみる
[1,]
1
3
5
2行3列、列優先で行列として解釈される
[2,]
2
4
6
>
dim(obj)
<-‐
c(3,2)
>
obj
[,1]
[,2]
2次元のdim
aGributeを付加してみる
[1,]
1
4
3行2列、列優先で行列として解釈される
[2,]
2
5
[3,]
3
6
7
9. 2.2.3
Dimnames
• 次元要素それぞれに対する個別名を保持する(例えば
2次元配列なら行名と列名)
• 2次元以上の場合は、各次元に対する名前vectorのリ
ストになる
>
dimnames(iris[1:10,])
raw
dimensionの名前
[[1]]
[1]
"1"
"2"
"3"
"4"
"5"
"6"
"7"
"8"
"9"
"10"
column
dimensionの名前
[[2]]
[1]
"Sepal.Length"
"Sepal.Width"
"Petal.Length"
"Petal.Width"
"Species"
9
10. 2.2.4
Classes
• オブジェクトのクラス情報を保持する
– クラスに継承関係がある場合は、親クラス名も含めた
character
vectorとなる
• class
aGributeの変更には制限が無く、自由に書き換え
可能
>
obj
<-‐
kmeans(dist(iris[,1:4]),3)
>
aGr(obj,"class")
[1]
"kmeans"
10
11. 2.2.5
Time
series
aGributes
• tsp
aGributeは時系列に関する情報(開始時点、終了
時点、frequency)を持つ
>
UKgas
Qtr1
Qtr2
Qtr3
Qtr4
1960
160.1
129.7
84.8
120.1
1961
160.1
124.9
84.8
116.9
1962
169.7
140.9
89.7
123.3
1963
187.3
144.1
92.9
120.1
4(quarter)
*
27(year)
=
108個のデータ
1964
176.1
147.3
89.7
123.3
1965
185.7
155.3
99.3
131.3
…
*「1単位」は時点値の整数部を1増減
1986
1163.9
613.1
347.4
782.8
させることに暗黙的に決まっている
>
aGributes(UKgas)
(おそらく)
$tsp
*行名は暗黙的に時点値の整数部となる
[1]
1960.00
1986.75
4.00
*Qtr1
…などの列名はFrequencyの値に
$class
データ何個で1単位か
よって暗黙的に与えられる
[1]
"ts"
(4ならQtr,
12なら月名,
それ以外は無し)
第108データの時点値
第1データの時点値
xtsを使うべき
11
12. 2.2.6
Copying
of
aGributes
• オブジェクトが変更されたときに、aGributeの値がコ
ピーされるべきかどうかは一般に決めるのが難しい
– ある程度の一般的な規則があるらしい(referenceを参照)
• ある単一の要素に対して同じ形式の単一要素を返す
関数(Scalar
func,on,
ベクトル関数も含む)はaGributeを
保つべき
• 2つ以上の要素(引数)から1つの要素を返すような関数
では、より多くのaGributeを持つ(longer?)要素の
aGributeをコピーする
– names,
dim,
dimnamesはコピーされないため、ユーザが明示
的にコーディングする必要がある
12
13. 2.2.6
Copying
of
aGributes
• オブジェクトのSubsepngでは、一般的に
names,dim,dimnamesを除くaGributeが消去される
• Subassignmentでは、データの長さが変わった場合でも、
aGributeは保持される
• Coercionは全てのaGributeを消去する
• 組み込みのソートメソッドはnamesを除く全ての
aGributeを消去する
– namesはデータと同様にソートされる
13
14. 2.3.1
Factors
• いくつかの決まった値のみをとる量を表現する
– levels
aGributeを持ち、”factor”
classである
>
class(iris$Species)
[1]
"factor"
>
levels(iris$Species)
[1]
"setosa"
"versicolor"
"virginica”
• factorクラスのオブジェクトは、contrasts
aGributeを持つ
ことがある
– 回帰などのモデリングで参照されることがある
14
15. 2.3.2
Data
frame
objects
• data
frameはmatrixのリスト、又はvector,
factor,
matrix
から成るリスト
– vectorの長さ(matrixの場合は行数)は全て同じでなければな
らない
• data
frameのnames
aGributeは変数(列要素)の名前を
保持し、row.names
aGributeはケース(行要素)の名前
を保持する
15
16. 2.3.2
Data
frame
objects
• data
frameは他の要素と同じ長さのリストを持つことが
でき、そのリストの要素には様々な長さのオブジェクト
を保持させることができる
• 複雑なデータ構造を表現できるが、現状のR実装では
まともにサポートされていない
data
frameの変数1
data
frameの変数2
V1
V2
0.1
1,
2,
3
0.5
6,
7,
9,12
0.3
5
1.0
0.8
4,8
16