SlideShare a Scribd company logo
1 of 10
Download to read offline
R言語超初心者
4. 関数と
プログラミング
鈴木禎子
株式会社Joe’sクラウドコンピューティング
この章の内容
1. 関数実行時の引数・引数名の指定
2. If, else, elseifによる条件分岐
3. forによる繰り返し
4. Whileによる繰り返し
5. Repeatによる繰り返し
6. 関数の定義
7. 大域変数と局所変数
8. 2個以上の値を返す場合
関数実行時の引数・引数名の指定
rnorm(100) rnormは、省略すれば, 平均 mean=0, 標準偏差sd=1の意味
rnorm(n=100, mean=0, sd=1)
rnorm(100, 0, 1) (部分的に)引数名を省略して良い関数もある
rnorm(100,1,0) 引数名を指定しない場合, 順序は変えられない
If, else, elseifによる条件分岐
If(x<0) “マイナス” x<0なら”マイナス”を返す
x=10
if(x>0) x else –x x>0ならx, それ以外で-xを返す
if(x>0) “プラス“ else if (x==0) “ゼロ” else “マイナス”
x>0なら”プラス”, x=0なら”ゼロ”, それ以外で”マイナス”を返す
if(x>0) “プラス”
else if (x==0) "ゼロ" else "マイナス“
Rは、「if(x>0) “プラス”」で完結すると判断し、文頭の「else if」を見てエラー
{if(x>0) “プラス"
else if (x==0) "ゼロ" else "マイナス“}
Rは、「{」があるので、「if(x>0) “プラス”」で完結すると判断せず、正しく実行される
forによる繰り返し
S<-0
for(i in 1:5) S<-S+i
S
S=0とし, I=1,i=2,…,i=5をSに加えていき、最後にSを評価
S<-0
for(i in 1:5) {S<-S+i; print(S)}
S=0とし, I=1,i=2,…,i=5をSに加えていき、毎回Sを印刷
S<-0; for(i in 1:5) {S<-S+i; print(S)}
S<-0
for(i in 1:5) {
S<-S+i
print(S)
}
2個以上の文を実行する場合、全体を{}でくくり、”;”で区切るか改行する (複文)
Whileによる繰り返し
n<-5
S<-0
i<-1
while(i<=n){
S<-S+i
i<-i+1
}
S
iがn以下である間
S<-S+I と i<-i+1
を実行
S<-0;
i<-1; S<-S+i=1;
i<-i+1=2; S<-S+2=3;
i<-i+1=3; S<-S+3=6;
i<-i+1=4 S<-S+4=10
i<-i+1=5; S<-S+5=15
i>5なので、それ以上繰り返さず、S=15を返す最後にSの値を返す
Repeatによる繰り返し
S<-0
i<-1
repeat{
if(i<=5) {S<-S+1; i<-i+1} else break
}
S
{}内を無条件で繰り返す
Breakは、
繰り返しから
抜けて次に行く
最後にSの値を返す
関数の定義
f.1 <- function(x) return(x^2)
f.1(5)
f.1 <- function(x) x^2 (returnを省略)
f.2 <- function(x) {
if(x>0) "プラス"
else if (x==0) "ゼロ" else "マイナス"
}
f.2(10)
入力xに対して
出力xの2乗を返す関数
実引数 5 仮引数 x
関数の定義は
複文でもよい
大域変数と局所変数
f.3<-function(x,y) sqrt(x^2+y^2)
f.3(3,4)
x=3; y=4 大域変数
f.3(5,12)
x; y
f.4<-function(x,y) {x<<-10; sqrt(x^2+y^2)}
f.4(5,12)
局所変数x=5,y=12
関数内では、同じ変数名の場合、局所変数をさす
関数内で大域変数に値を代入するには、”<-”ではなく、”<<-”
2個以上の値を返す
f.5<-function(x,y) c(x+y,x-y)
f.5(1,3)
ベクトルで返す

More Related Content

What's hot

yieldとreturnの話
yieldとreturnの話yieldとreturnの話
yieldとreturnの話bleis tift
 
モナドハンズオン前座
モナドハンズオン前座モナドハンズオン前座
モナドハンズオン前座bleis tift
 
オブジェクト指向できていますか?
オブジェクト指向できていますか?オブジェクト指向できていますか?
オブジェクト指向できていますか?Moriharu Ohzu
 
初心者講習会資料(Osaka.r#6)
初心者講習会資料(Osaka.r#6)初心者講習会資料(Osaka.r#6)
初心者講習会資料(Osaka.r#6)Masahiro Hayashi
 
言語処理系入門1
言語処理系入門1言語処理系入門1
言語処理系入門1Kenta Hattori
 
BOF1-Scala02.pdf
BOF1-Scala02.pdfBOF1-Scala02.pdf
BOF1-Scala02.pdfHiroshi Ono
 
プログラミング言語 Ruby 2章 Rubyプログラムの構造と実行
プログラミング言語 Ruby 2章 Rubyプログラムの構造と実行プログラミング言語 Ruby 2章 Rubyプログラムの構造と実行
プログラミング言語 Ruby 2章 Rubyプログラムの構造と実行monglee
 
クロージャデザインパターン
クロージャデザインパターンクロージャデザインパターン
クロージャデザインパターンMoriharu Ohzu
 
アルゴリズムとデータ構造2
アルゴリズムとデータ構造2アルゴリズムとデータ構造2
アルゴリズムとデータ構造2Kenta Hattori
 
Nips yomikai 1226
Nips yomikai 1226Nips yomikai 1226
Nips yomikai 1226Yo Ehara
 
エラーハンドリング
エラーハンドリングエラーハンドリング
エラーハンドリング道化師 堂華
 
Design by contractとホーア論理
Design by contractとホーア論理Design by contractとホーア論理
Design by contractとホーア論理Takuya Matsunaga
 
2018年度 若手技術者向け講座 リファクタリング
2018年度 若手技術者向け講座 リファクタリング2018年度 若手技術者向け講座 リファクタリング
2018年度 若手技術者向け講座 リファクタリングkeki3
 
ちょっと詳しくJavaScript 第2回【関数と引数】
ちょっと詳しくJavaScript 第2回【関数と引数】ちょっと詳しくJavaScript 第2回【関数と引数】
ちょっと詳しくJavaScript 第2回【関数と引数】株式会社ランチェスター
 
すごいConstたのしく使おう!
すごいConstたのしく使おう!すごいConstたのしく使おう!
すごいConstたのしく使おう!Akihiro Nishimura
 

What's hot (19)

yieldとreturnの話
yieldとreturnの話yieldとreturnの話
yieldとreturnの話
 
モナドハンズオン前座
モナドハンズオン前座モナドハンズオン前座
モナドハンズオン前座
 
オブジェクト指向できていますか?
オブジェクト指向できていますか?オブジェクト指向できていますか?
オブジェクト指向できていますか?
 
初心者講習会資料(Osaka.r#6)
初心者講習会資料(Osaka.r#6)初心者講習会資料(Osaka.r#6)
初心者講習会資料(Osaka.r#6)
 
言語処理系入門1
言語処理系入門1言語処理系入門1
言語処理系入門1
 
ちょっと詳しくJavaScript 第3回【prototype】
ちょっと詳しくJavaScript 第3回【prototype】ちょっと詳しくJavaScript 第3回【prototype】
ちょっと詳しくJavaScript 第3回【prototype】
 
BOF1-Scala02.pdf
BOF1-Scala02.pdfBOF1-Scala02.pdf
BOF1-Scala02.pdf
 
プログラミング言語 Ruby 2章 Rubyプログラムの構造と実行
プログラミング言語 Ruby 2章 Rubyプログラムの構造と実行プログラミング言語 Ruby 2章 Rubyプログラムの構造と実行
プログラミング言語 Ruby 2章 Rubyプログラムの構造と実行
 
クロージャデザインパターン
クロージャデザインパターンクロージャデザインパターン
クロージャデザインパターン
 
#7:演算子と分岐
#7:演算子と分岐#7:演算子と分岐
#7:演算子と分岐
 
アルゴリズムとデータ構造2
アルゴリズムとデータ構造2アルゴリズムとデータ構造2
アルゴリズムとデータ構造2
 
Nips yomikai 1226
Nips yomikai 1226Nips yomikai 1226
Nips yomikai 1226
 
エラーハンドリング
エラーハンドリングエラーハンドリング
エラーハンドリング
 
C++0x総復習
C++0x総復習C++0x総復習
C++0x総復習
 
Design by contractとホーア論理
Design by contractとホーア論理Design by contractとホーア論理
Design by contractとホーア論理
 
2018年度 若手技術者向け講座 リファクタリング
2018年度 若手技術者向け講座 リファクタリング2018年度 若手技術者向け講座 リファクタリング
2018年度 若手技術者向け講座 リファクタリング
 
Ruby4章
Ruby4章Ruby4章
Ruby4章
 
ちょっと詳しくJavaScript 第2回【関数と引数】
ちょっと詳しくJavaScript 第2回【関数と引数】ちょっと詳しくJavaScript 第2回【関数と引数】
ちょっと詳しくJavaScript 第2回【関数と引数】
 
すごいConstたのしく使おう!
すごいConstたのしく使おう!すごいConstたのしく使おう!
すごいConstたのしく使おう!
 

Rの初歩: 4. 関数とプログラミング