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