R language definition3.1_3.2

1,988 views

Published on

0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
1,988
On SlideShare
0
From Embeds
0
Number of Embeds
867
Actions
Shares
0
Downloads
4
Comments
0
Likes
1
Embeds 0
No embeds

No notes for slide

R language definition3.1_3.2

  1. 1. R Language Definition3 Evaluation of expressions 3.1〜3.2 Version 2.15.0  (2012‐03‐30) DRAFT ほとんど和訳version1.1.0 (2000‐June 15)DRAFT Tokyo.Lang.R#2 2012‐June 2 @manazo 1
  2. 2. 3 Evaluation of expressions (すべての表現式は値を持つ)• ユーザーは表現式を構築し、それに対し評価 機構を起動する• 3.1 Simple evaluation(単純な評価)• 3.2 Control structures(制御構造) 2
  3. 3. 3.1 Simple evaluation (単純な評価)• 3.1.1 Constants(定数)• 3.1.2 Symbol lookup(シンボルlookup)• 3.1.3 Function calls(関数呼び出し)• 3.1.4 Operators(演算⼦) 3
  4. 4. 3.1.1 Constants> 1 > str(0x10L)[1] 1 int 16>str(1) > 1e3Lnum [1] 1000> 1L > 1‐e3L[1] 1 エラー: オブジェクト> str(1L) e3L がありませんint 4
  5. 5. 3.1.2 Symbol lookup• 名前がないと何も呼べない• 名前それ⾃体がシンボル• シンボルもRのオブジェクト – ⾔語⾃体のプログラミングを除く> y<‐4> y[1] 4 5
  6. 6. 3.1.3 Function calls• 関数はコンマで区切られた引数のリストをも つ名前で起動 – mean(1:10)• 関数呼び出しはタグ付き引数を持つことがで きる – plot(x, y, pch = 3)• タグの利⽤はたくさんのオプション引数を持 つ関数に対し明⽩な便宜をもたらす – 順番を覚えておかなくてもよい 6
  7. 7. 3.1.4 Operators• RではC⾔語と類似した演算⼦を⽤いた数値 表現の使⽤が可能> 1 + 2[1] 3• 演算⼦の呼び出しと関数呼び出しに差はない> a<‐1;x<‐5> y <‐ 2 * (a + log(x)) > <‐(y,*(2,+(a,log(x))))> y > y[1] 5.218876 [1] 5.218876 #演算⼦はクォートする 7
  8. 8. > x <‐ rnorm(5) 続き> x[1] ‐0.3106407 ‐0.1164581 ‐0.1114981 ‐0.3776523  0.2587829> x[2][1] ‐0.1164581> x<‐options()> class(x)[1] "list"> x$prompt[1] "> "> $(x,prompt) #関数っぽく[1] "> " 8
  9. 9. -,+• 差、単項演算⼦としても⼆項演算⼦としても• 和、同> ‐1 #単項演算⼦の例 [1] ‐1> 1:5‐1 #ベクトルに対しても可[1] 0 1 2 3 4 9
  10. 10. !• 単項演算⼦、否定>!TRUE[1] FALSE> !0:3 #ベクトルに対しても可[1]  TRUE FALSE FALSE FALSE 10
  11. 11. ~• チルダ、モデル式、単項演算⼦、⼆項演算⼦> lm(dist~speed,data=cars)Call:lm(formula = dist ~ speed, data = cars)Coefficients:(Intercept)        speed   ‐17.579        3.932 11
  12. 12. ?• help>?"?" #演算⼦等はクォートするQuestion    package:utils      R DocumentationDocumentation ShortcutsDescription: These functions provide access to documentation.   Documentation on a topic with name name (typically, an R object or a  data set) can be displayed by either help("name") or ?name. 12
  13. 13. :• 数列 ⼆項演算⼦> 1:5[1]1 2 3 4 5• モデル式においては交互作⽤> glm(Sepal.Length~Sepal.Width:Petal.L ength,data=iris) 13
  14. 14. *,/• 乗除 ⼆項演算⼦> 2 * 3[1] 6> x<‐matrix(1:9,3)> x*x #⾏列の積ではない [,1] [,2] [,3][1,]    1   16   49[2,]    4   25   64[3,]    9   36   81 14
  15. 15. ^• 累乗 > 10^(1:3)> 5^2 [1]   10  100 1000[1] 25 > log10(10^(1:3))> x^2 [1] 1 2 3 [,1] [,2] [,3] > (1:3)^10[1,]    1   16   49 [1]    1  1024 59049[2,]    4   25   64[3,]    9   36   81 > (1:3)^(1:3) [1]  1  4 27 15
  16. 16. %x%• スペシャル⼆項演算⼦ – x can be replaced by any valied name 16
  17. 17. %%• 剰余(余り)> 5 %% 2[1] 1 17
  18. 18. %/%• 整数除算(Integer divide)商> 5 %/% 2[1] 2 18
  19. 19. %*%• ⾏列の積  > a<‐matrix(c(2,‐3,‐1,4),2) > b<‐matrix(c(1,2),2)> a > b [,1] [,2] [,1][1,]    2   ‐1 [1,]    1[2,]   ‐3    4 [2,]    2 > a %*% b [,1] [1,]    0 [2,]    5 19
  20. 20. arabikiさんから `%o%` #バッククォートすると中⾝は⾒える %o%• 外積(outer product)> 1:9 %o% 1:9 # outer(1:9,1:9) [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [1,]    1    2    3    4    5    6    7    8    9 [2,]    2    4    6    8   10   12   14   16   18 [3,]    3    6    9   12   15   18   21   24   27 [4,]    4    8   12   16   20   24   28   32   36 [5,]    5   10   15   20   25   30   35   40   45 [6,]    6   12   18   24   30   36   42   48   54 [7,]    7   14   21   28   35   42   49   56   63 [8,]    8   16   24   32   40   48   56   64   72 [9,]    9   18   27   36   45   54   63   72   81 20
  21. 21. %x%• クロネッカー積> x%x%x # x<‐matrix(1:9,3) [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [1,]    1    4    7    4   16   28    7   28   49 1 4 7 [2,]    2    5    8    8   20   32   14   35   56 [3,]    3    6    9   12   24   36   21   42   63 [4,]    2    8   14    5   20   35    8   32   56 2 5 8 [5,]    4   10   16   10   25   40   16   40   64 [6,]    6   12   18   15   30   45   24   48   72 [7,]    3   12   21    6   24   42    9   36   63 3 6 9 [8,]    6   15   24   12   30   48   18   45   72 21 [9,]    9   18   27   18   36   54   27   54   81
  22. 22. %in%• 含まれる> 2 %in% 1:10  [1] TRUE> "Species" %in% names(iris)[1] TRUE 22
  23. 23. <,>,==,>=,<=• ⼤⼩の⽐較> 4 > 2[1] TRUE 23
  24. 24. &, &&, |, ||•& ベクトルの論理積 > a<‐1:4; a[a>1 & a<4] #=> 2 3• && > a>1 [1] FALSE TRUE  TRUE  TRUE ふつうの論理積 > a>4 [1] FALSE FALSE FALSE FALSE•| #|  FALSE TRUE  TRUE  TRUE ベクトルの論理和 1      2     3     4 > a<‐1:4; a[a>1 | a>4] #=> 2 3 4• || ふつうの論理和 24
  25. 25. <‐, ‐>• 付値(代⼊? 割り当て?)• <‐ – Left assignment,binary• ‐> – Right assignment, binary 25
  26. 26. $• List subset, ⼆項演算⼦>head(iris$Species) [1] setosa setosa setosa setosa setosa setosaLevels: setosa versicolor virginica> str(iris)data.frame:   150 obs. of  5 variables: $ Sepal.Length: num  5.1 4.9 4.7 4.6 5 5.4 4.6 5 4.4 4.9 ... $ Sepal.Width : num  3.5 3 3.2 3.1 3.6 3.9 3.4 3.4 2.9 3.1 ... $ Petal.Length: num  1.4 1.4 1.3 1.5 1.4 1.7 1.4 1.5 1.4 1.5 ... $ Petal.Width : num  0.2 0.2 0.2 0.2 0.2 0.4 0.3 0.2 0.2 0.1 ... $ Species : Factor w/ 3 levels "setosa","versicolor",..: 1 1 1  1 1 1 1 1 1 1 ... 26
  27. 27. 3.2 Control structures• 3.2.1 if• 3.2.2 Looping• 3.2.3 repeat• 3.2.4 while• 3.2.5 for• 3.2.6 switch 27
  28. 28. 3.2.1 if> x <‐ 0:3> if(any(x<=0))y<‐log(1+x)else y<‐log(x) #xの中に0以下のものがあればlog(1+x)> y[1] 0.0000000 0.6931472 1.0986123 1.3862944> log(0)[1] ‐Inf #これをさけるために1を⾜す• 代⼊(付値)可> y <‐ if(any(x <= 0))log(1+x) else log(x) 28
  29. 29. 3.2.2 Looping• Rの繰り返しは3つfor, while, repeat• 評価された最後の⽂の値を返す• ⽂の値をシンボルに付値することが可• 暗黙の繰り返し – tapply, apply, lapply – ベクトル化された数値は繰り返し(for, while  and repeat)を使う必要がないかもしれない – 「あらびき⽇記」Rのapply徹底解説 参照 http://d.hatena.ne.jp/a_bicky/20120425/1335312593 29
  30. 30. 3.2.3 repeat• ブロック⽂でなくてはならない> i<‐0> repeat{if((i<‐i+1)==5){cat(i,"¥n");break}}5 30
  31. 31. 3.2.4 while> i<‐0> while(i<5){i<‐i+1;print(i)}[1] 1 #0[1] 2 #1[1] 3 #2[1] 4 #3[1] 5 #4 31
  32. 32. 3.2.5 forfor(i in vector) statement1• listでもよいx<‐options();for(i in x)print(i) 32
  33. 33. 3.2.6 switch> x<‐3> switch(x,2+2,mean(1:10),rnorm(5))[1]  ‐0.3719517  ‐1.7978237  ‐0.3606216  ‐ 0.6411431 ‐0.7713163> switch(2,2+2,mean(1:10),rnorm(5))[1] 5.5> switch(6,2+2,mean(1:10),rnorm(5))[1] NULL #超えて参照 33
  34. 34. 続き> y<‐"果物"> switch(y,果物="バナナ",野菜="ブロッコ リー","どちらも")[1] "バナナ"> y<‐"⾁類"> switch(y,果物="バナナ",野菜="ブロッコ リー","どちらも")[1]"どちらでも" 34
  35. 35. 続き2・普通の使⽤法は関数のある引数の⽂字値に応じて分岐centre <‐ function(x, type){switch(type, mean = mean(x), median = median(x), trimmed = mean(x, trim =.1))}x <‐ rcauchy(10)centre(x,"mean") 35
  36. 36. 続き3• 既存の選択肢のリストから選ぶためには switchは評価すべき項⽬を選ぶ最良の⽅法 ではないかもしれない。• eval(x[[cond]])経由でevalと部分集合演 算⼦[[を直接使う⽅が望ましい – 意味がわかりませぬ。 36
  37. 37. ご静聴に感謝します。 37

×