R Language Definition 2.2 to 2.3

16
R Language Defini,on version 2.14.2 (20120229) DRAFT Tokyo.Lang.R #1 2012/4/1 @_kohta 2.2 ~ 2.3 1

description

 

Transcript of R Language Definition 2.2 to 2.3

Page 1: 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

Page 2: R Language Definition 2.2 to 2.3

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

Page 3: R Language Definition 2.2 to 2.3

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

Page 4: R Language Definition 2.2 to 2.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

Page 5: R Language Definition 2.2 to 2.3

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]  の長さと同じでなければなりません  

Page 6: R Language Definition 2.2 to 2.3

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

Page 7: R Language Definition 2.2 to 2.3

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

Page 8: R Language Definition 2.2 to 2.3

2.2.2  Dimensions •  p.7最終行  –  The  length  of  one  or  more  dimensions  may  be  zero.  –  どういうこと??  

8

Page 9: R Language Definition 2.2 to 2.3

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

Page 10: R Language Definition 2.2 to 2.3

2.2.4  Classes •  オブジェクトのクラス情報を保持する  –  クラスに継承関係がある場合は、親クラス名も含めたcharacter  vectorとなる  

•  class  aGributeの変更には制限が無く、自由に書き換え可能  

>  obj  <-­‐  kmeans(dist(iris[,1:4]),3)    >  aGr(obj,"class")  [1]  "kmeans"

10

Page 11: R Language Definition 2.2 to 2.3

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

Page 12: R Language Definition 2.2 to 2.3

2.2.6  Copying  of  aGributes •  オブジェクトが変更されたときに、aGributeの値がコ

ピーされるべきかどうかは一般に決めるのが難しい  –  ある程度の一般的な規則があるらしい(referenceを参照)  

•  ある単一の要素に対して同じ形式の単一要素を返す関数(Scalar  func,on,  ベクトル関数も含む)はaGributeを保つべき  

•  2つ以上の要素(引数)から1つの要素を返すような関数では、より多くのaGributeを持つ(longer?)要素のaGributeをコピーする  –  names,  dim,  dimnamesはコピーされないため、ユーザが明示

的にコーディングする必要がある

12

Page 13: R Language Definition 2.2 to 2.3

2.2.6  Copying  of  aGributes •  オブジェクトのSubsepngでは、一般的にnames,dim,dimnamesを除くaGributeが消去される  

•  Subassignmentでは、データの長さが変わった場合でも、aGributeは保持される  

•  Coercionは全てのaGributeを消去する  •  組み込みのソートメソッドはnamesを除く全てのaGributeを消去する  –  namesはデータと同様にソートされる

13

Page 14: R Language Definition 2.2 to 2.3

2.3.1  Factors •  いくつかの決まった値のみをとる量を表現する  –  levels  aGributeを持ち、”factor”  classである  

•  factorクラスのオブジェクトは、contrasts  aGributeを持つことがある  –  回帰などのモデリングで参照されることがある  

>  class(iris$Species)  [1]  "factor"  >  levels(iris$Species)  [1]  "setosa"          "versicolor"  "virginica”    

14

Page 15: R Language Definition 2.2 to 2.3

2.3.2  Data  frame  objects •  data  frameはmatrixのリスト、又はvector,  factor,  matrix

から成るリスト  –  vectorの長さ(matrixの場合は行数)は全て同じでなければな

らない  

•  data  frameのnames  aGributeは変数(列要素)の名前を保持し、row.names  aGributeはケース(行要素)の名前を保持する

15

Page 16: R Language Definition 2.2 to 2.3

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