SlideShare a Scribd company logo
R Language Definition
3 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
3 Evaluation of expressions
  (すべての表現式は値を持つ)
• ユーザーは表現式を構築し、それに対し評価
  機構を起動する

• 3.1 Simple evaluation(単純な評価)
• 3.2 Control structures(制御構造)



                                 2
3.1 Simple evaluation
               (単純な評価)
• 3.1.1 Constants(定数)
• 3.1.2 Symbol lookup(シンボルlookup)
• 3.1.3 Function calls(関数呼び出し)
• 3.1.4 Operators(演算⼦)




                                    3
3.1.1 Constants

> 1          > str(0x10L)
[1] 1        int 16
>str(1)      > 1e3L
num          [1] 1000
> 1L         > 1‐e3L
[1] 1         エラー:    オブジェクト
> str(1L)     'e3L' がありません
int

                               4
3.1.2 Symbol lookup

• 名前がないと何も呼べない
• 名前それ⾃体がシンボル
• シンボルもRのオブジェクト
  – ⾔語⾃体のプログラミングを除く
> y<‐4
> y
[1] 4
                               5
3.1.3 Function calls

• 関数はコンマで区切られた引数のリストをも
  つ名前で起動
 – mean(1:10)
• 関数呼び出しはタグ付き引数を持つことがで
  きる
 – plot(x, y, pch = 3)
• タグの利⽤はたくさんのオプション引数を持
  つ関数に対し明⽩な便宜をもたらす
 – 順番を覚えておかなくてもよい                6
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
> 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
-,+

• 差、単項演算⼦としても⼆項演算⼦としても
• 和、同

> ‐1 #単項演算⼦の例
 [1] ‐1
> 1:5‐1 #ベクトルに対しても可
[1] 0 1 2 3 4
                            9
!

• 単項演算⼦、否定

>!TRUE
[1] FALSE
> !0:3 #ベクトルに対しても可
[1]  TRUE FALSE FALSE FALSE


                                  10
~

• チルダ、モデル式、単項演算⼦、⼆項演算⼦
> lm(dist~speed,data=cars)

Call:
lm(formula = dist ~ speed, data = cars)

Coefficients:
(Intercept)        speed  
    ‐17.579        3.932

                                              11
?

• help
>?"?" #演算⼦等はクォートする
Question    package:utils      R Documentation
Documentation Shortcuts
Description:
     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
:

• 数列 ⼆項演算⼦
> 1:5
[1]1 2 3 4 5

• モデル式においては交互作⽤
> glm(Sepal.Length~Sepal.Width:Petal.L
  ength,data=iris)

                                       13
*,/

• 乗除 ⼆項演算⼦
> 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
^

• 累乗                  > 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
%x%

• スペシャル⼆項演算⼦
 – x can be replaced by any valied name




                                           16
%%

• 剰余(余り)
> 5 %% 2
[1] 1




                17
%/%

• 整数除算(Integer divide)商
> 5 %/% 2
[1] 2




                                18
%*%

• ⾏列の積                         
> 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
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
%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
%in%

• 含まれる
> 2 %in% 1:10 
 [1] TRUE

> "Species" %in% names(iris)
[1] TRUE


                                      22
<,>,==,>=,<=

• ⼤⼩の⽐較
> 4 > 2
[1] TRUE




                          23
&, &&, |, ||
•&
       ベクトルの論理積
        > 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
<‐, ‐>

• 付値(代⼊? 割り当て?)
• <‐
  – Left assignment,binary
• ‐>
  – Right assignment, binary




                                        25
$

• List subset, ⼆項演算⼦
>head(iris$Species)
 [1] setosa setosa setosa setosa setosa setosa
Levels: 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
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
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
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
3.2.3 repeat

• ブロック⽂でなくてはならない

> i<‐0
> repeat{if((i<‐i+1)==5)
{cat(i,"¥n");break}}
5


                                    30
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
3.2.5 for

for(i in vector)
  statement1

• listでもよい
x<‐options();for(i in x)print(i)



                                     32
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
続き

> y<‐"果物"
> switch(y,果物="バナナ",野菜="ブロッコ
  リー","どちらも")
[1] "バナナ"
> y<‐"⾁類"
> switch(y,果物="バナナ",野菜="ブロッコ
  リー","どちらも")
[1]"どちらでも"
                             34
続き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
続き3

• 既存の選択肢のリストから選ぶためには
  switchは評価すべき項⽬を選ぶ最良の⽅法
  ではないかもしれない。
• eval(x[[cond]])経由でevalと部分集合演
  算⼦[[を直接使う⽅が望ましい
 – 意味がわかりませぬ。



                             36
ご静聴に感謝します。


             37

More Related Content

Viewers also liked

Itroroduction to R language
Itroroduction to R languageItroroduction to R language
Itroroduction to R language
chhabria-nitesh
 
R programming language
R programming languageR programming language
R programming language
Alberto Minetti
 
R programming Language , Rahul Singh
R programming Language , Rahul SinghR programming Language , Rahul Singh
R programming Language , Rahul Singh
Ravi Basil
 
Minetti master thesis
Minetti master thesisMinetti master thesis
Minetti master thesis
Alberto Minetti
 
Introduction to the language R
Introduction to the language RIntroduction to the language R
Introduction to the language R
fbenault
 
R programming language - Mustafa Wahedi
R programming language - Mustafa WahediR programming language - Mustafa Wahedi
R programming language - Mustafa Wahedi
UNICORNS IN TECH
 
R Programming Overview
R Programming Overview R Programming Overview
R Programming Overview
dlamb3244
 
R programming language: conceptual overview
R programming language: conceptual overviewR programming language: conceptual overview
R programming language: conceptual overview
Maxim Litvak
 
Data Analysis and Programming in R
Data Analysis and Programming in RData Analysis and Programming in R
Data Analysis and Programming in R
Eshwar Sai
 
A Workshop on R
A Workshop on RA Workshop on R
A Workshop on R
Ajay Ohri
 
R language tutorial
R language tutorialR language tutorial
R language tutorial
David Chiu
 
An Interactive Introduction To R (Programming Language For Statistics)
An Interactive Introduction To R (Programming Language For Statistics)An Interactive Introduction To R (Programming Language For Statistics)
An Interactive Introduction To R (Programming Language For Statistics)
Dataspora
 
R programming Basic & Advanced
R programming Basic & AdvancedR programming Basic & Advanced
R programming Basic & Advanced
Sohom Ghosh
 
Chapter 6: Computing on the language (R Language Definition)
Chapter 6: Computing on the language (R Language Definition)Chapter 6: Computing on the language (R Language Definition)
Chapter 6: Computing on the language (R Language Definition)
Nagi Teramo
 
SEO: Getting Personal
SEO: Getting PersonalSEO: Getting Personal
SEO: Getting Personal
Kirsty Hulse
 

Viewers also liked (15)

Itroroduction to R language
Itroroduction to R languageItroroduction to R language
Itroroduction to R language
 
R programming language
R programming languageR programming language
R programming language
 
R programming Language , Rahul Singh
R programming Language , Rahul SinghR programming Language , Rahul Singh
R programming Language , Rahul Singh
 
Minetti master thesis
Minetti master thesisMinetti master thesis
Minetti master thesis
 
Introduction to the language R
Introduction to the language RIntroduction to the language R
Introduction to the language R
 
R programming language - Mustafa Wahedi
R programming language - Mustafa WahediR programming language - Mustafa Wahedi
R programming language - Mustafa Wahedi
 
R Programming Overview
R Programming Overview R Programming Overview
R Programming Overview
 
R programming language: conceptual overview
R programming language: conceptual overviewR programming language: conceptual overview
R programming language: conceptual overview
 
Data Analysis and Programming in R
Data Analysis and Programming in RData Analysis and Programming in R
Data Analysis and Programming in R
 
A Workshop on R
A Workshop on RA Workshop on R
A Workshop on R
 
R language tutorial
R language tutorialR language tutorial
R language tutorial
 
An Interactive Introduction To R (Programming Language For Statistics)
An Interactive Introduction To R (Programming Language For Statistics)An Interactive Introduction To R (Programming Language For Statistics)
An Interactive Introduction To R (Programming Language For Statistics)
 
R programming Basic & Advanced
R programming Basic & AdvancedR programming Basic & Advanced
R programming Basic & Advanced
 
Chapter 6: Computing on the language (R Language Definition)
Chapter 6: Computing on the language (R Language Definition)Chapter 6: Computing on the language (R Language Definition)
Chapter 6: Computing on the language (R Language Definition)
 
SEO: Getting Personal
SEO: Getting PersonalSEO: Getting Personal
SEO: Getting Personal
 

Similar to R language definition3.1_3.2

10分で分かるr言語入門ver2.10 14 1101
10分で分かるr言語入門ver2.10 14 110110分で分かるr言語入門ver2.10 14 1101
10分で分かるr言語入門ver2.10 14 1101
Nobuaki Oshiro
 
10分で分かるr言語入門ver2.9 14 0920
10分で分かるr言語入門ver2.9 14 0920 10分で分かるr言語入門ver2.9 14 0920
10分で分かるr言語入門ver2.9 14 0920
Nobuaki Oshiro
 
Tokyo r27
Tokyo r27Tokyo r27
Tokyo r27
Takashi Minoda
 
Clojure programming-chapter-2
Clojure programming-chapter-2Clojure programming-chapter-2
Clojure programming-chapter-2
Masao Kato
 
F#入門 ~関数プログラミングとは何か~
F#入門 ~関数プログラミングとは何か~F#入門 ~関数プログラミングとは何か~
F#入門 ~関数プログラミングとは何か~
Nobuhisa Koizumi
 
20140920 tokyo r43
20140920 tokyo r4320140920 tokyo r43
20140920 tokyo r43
Takashi Kitano
 
K010 appstat201201
K010 appstat201201K010 appstat201201
K010 appstat201201t2tarumi
 
多次元配列の効率的利用法の検討
多次元配列の効率的利用法の検討多次元配列の効率的利用法の検討
多次元配列の効率的利用法の検討
Yu Sato
 
Nagoya.R #12 入門者講習
Nagoya.R #12 入門者講習Nagoya.R #12 入門者講習
Nagoya.R #12 入門者講習
Yusaku Kawaguchi
 
すごいHaskell読書会#1 in 大阪
すごいHaskell読書会#1 in 大阪すごいHaskell読書会#1 in 大阪
すごいHaskell読書会#1 in 大阪yashigani
 
R's anti sparseness
R's anti sparsenessR's anti sparseness
R's anti sparseness
ybenjo
 
形式手法とalloyの紹介
形式手法とalloyの紹介形式手法とalloyの紹介
形式手法とalloyの紹介
Daisuke Tanaka
 
C02
C02C02
Rで実験計画法 前編
Rで実験計画法 前編Rで実験計画法 前編
Rで実験計画法 前編
itoyan110
 
Rで学ぶデータマイニングI 第8章〜第13章
Rで学ぶデータマイニングI 第8章〜第13章Rで学ぶデータマイニングI 第8章〜第13章
Rで学ぶデータマイニングI 第8章〜第13章Prunus 1350
 
Elixirだ 第1回強化版 前半
Elixirだ 第1回強化版 前半Elixirだ 第1回強化版 前半
Elixirだ 第1回強化版 前半
Joe_noh
 
C# 式木 (Expression Tree) ~ LINQをより深く理解するために ~
C# 式木 (Expression Tree) ~ LINQをより深く理解するために ~C# 式木 (Expression Tree) ~ LINQをより深く理解するために ~
C# 式木 (Expression Tree) ~ LINQをより深く理解するために ~
Fujio Kojima
 
R_note_01_ver1.1
R_note_01_ver1.1 R_note_01_ver1.1
R_note_01_ver1.1
Satoshi Kume
 
Rによる繰り返しの並列処理
Rによる繰り返しの並列処理Rによる繰り返しの並列処理
Rによる繰り返しの並列処理
wada, kazumi
 
「plyrパッケージで君も前処理スタ☆」改め「plyrパッケージ徹底入門」
「plyrパッケージで君も前処理スタ☆」改め「plyrパッケージ徹底入門」「plyrパッケージで君も前処理スタ☆」改め「plyrパッケージ徹底入門」
「plyrパッケージで君も前処理スタ☆」改め「plyrパッケージ徹底入門」
Nagi Teramo
 

Similar to R language definition3.1_3.2 (20)

10分で分かるr言語入門ver2.10 14 1101
10分で分かるr言語入門ver2.10 14 110110分で分かるr言語入門ver2.10 14 1101
10分で分かるr言語入門ver2.10 14 1101
 
10分で分かるr言語入門ver2.9 14 0920
10分で分かるr言語入門ver2.9 14 0920 10分で分かるr言語入門ver2.9 14 0920
10分で分かるr言語入門ver2.9 14 0920
 
Tokyo r27
Tokyo r27Tokyo r27
Tokyo r27
 
Clojure programming-chapter-2
Clojure programming-chapter-2Clojure programming-chapter-2
Clojure programming-chapter-2
 
F#入門 ~関数プログラミングとは何か~
F#入門 ~関数プログラミングとは何か~F#入門 ~関数プログラミングとは何か~
F#入門 ~関数プログラミングとは何か~
 
20140920 tokyo r43
20140920 tokyo r4320140920 tokyo r43
20140920 tokyo r43
 
K010 appstat201201
K010 appstat201201K010 appstat201201
K010 appstat201201
 
多次元配列の効率的利用法の検討
多次元配列の効率的利用法の検討多次元配列の効率的利用法の検討
多次元配列の効率的利用法の検討
 
Nagoya.R #12 入門者講習
Nagoya.R #12 入門者講習Nagoya.R #12 入門者講習
Nagoya.R #12 入門者講習
 
すごいHaskell読書会#1 in 大阪
すごいHaskell読書会#1 in 大阪すごいHaskell読書会#1 in 大阪
すごいHaskell読書会#1 in 大阪
 
R's anti sparseness
R's anti sparsenessR's anti sparseness
R's anti sparseness
 
形式手法とalloyの紹介
形式手法とalloyの紹介形式手法とalloyの紹介
形式手法とalloyの紹介
 
C02
C02C02
C02
 
Rで実験計画法 前編
Rで実験計画法 前編Rで実験計画法 前編
Rで実験計画法 前編
 
Rで学ぶデータマイニングI 第8章〜第13章
Rで学ぶデータマイニングI 第8章〜第13章Rで学ぶデータマイニングI 第8章〜第13章
Rで学ぶデータマイニングI 第8章〜第13章
 
Elixirだ 第1回強化版 前半
Elixirだ 第1回強化版 前半Elixirだ 第1回強化版 前半
Elixirだ 第1回強化版 前半
 
C# 式木 (Expression Tree) ~ LINQをより深く理解するために ~
C# 式木 (Expression Tree) ~ LINQをより深く理解するために ~C# 式木 (Expression Tree) ~ LINQをより深く理解するために ~
C# 式木 (Expression Tree) ~ LINQをより深く理解するために ~
 
R_note_01_ver1.1
R_note_01_ver1.1 R_note_01_ver1.1
R_note_01_ver1.1
 
Rによる繰り返しの並列処理
Rによる繰り返しの並列処理Rによる繰り返しの並列処理
Rによる繰り返しの並列処理
 
「plyrパッケージで君も前処理スタ☆」改め「plyrパッケージ徹底入門」
「plyrパッケージで君も前処理スタ☆」改め「plyrパッケージ徹底入門」「plyrパッケージで君も前処理スタ☆」改め「plyrパッケージ徹底入門」
「plyrパッケージで君も前処理スタ☆」改め「plyrパッケージ徹底入門」
 

More from Yoshiteru Kamiyama

オイラーの公式で感じる次元の呪い
オイラーの公式で感じる次元の呪いオイラーの公式で感じる次元の呪い
オイラーの公式で感じる次元の呪いYoshiteru Kamiyama
 
Rでマンデルブロ集合
Rでマンデルブロ集合Rでマンデルブロ集合
Rでマンデルブロ集合Yoshiteru Kamiyama
 

More from Yoshiteru Kamiyama (7)

オイラーの公式で感じる次元の呪い
オイラーの公式で感じる次元の呪いオイラーの公式で感じる次元の呪い
オイラーの公式で感じる次元の呪い
 
Tokyo.rの輪
Tokyo.rの輪Tokyo.rの輪
Tokyo.rの輪
 
Listを串刺し
Listを串刺しListを串刺し
Listを串刺し
 
rで踊るパスタ
rで踊るパスタrで踊るパスタ
rで踊るパスタ
 
Rでマンデルブロ集合
Rでマンデルブロ集合Rでマンデルブロ集合
Rでマンデルブロ集合
 
黄金比.再帰
黄金比.再帰黄金比.再帰
黄金比.再帰
 
医療費ts
医療費ts医療費ts
医療費ts
 

R language definition3.1_3.2