農業情報学 第6回 - RENANDI

農業情報学
第6回
増冨祐司
今⽇は関数プログラミング
を体に染み込ませる。
復習
関数プログラミング
• いつも作った関数は閉じてしまうと消えてしまう。
• もう⼀度使いたい時がある。
• あるいは少し修正して使いたい時がある。
• プログラムとして残しておくことにより、⼀度作った関数を残
しておけるし、再利⽤・修正ができる。
プログラミンの書き⽅・実⾏の仕⽅
• スクリプト(Rエディタ)にプログラムを書く。
• STEP1:ファイル>新しいスクリプトをクリック
• STEP2:エディタにプログラムを書く。
• ここに⼊⼒を2倍する関数nibaiを書いてみよう。
• STEP3:スクリプトを保存する(フロッピーマーク)
• 名前をつけて保存(「.R」は勝⼿につく)
• ファイル名.Rというファイルができたことを確認
• pro.nibai.Rにしよう。
• STEP4:これでプログラムは保存され、加筆・修正が
できる。
• スクリプトに書かれている関数やプログラムの利⽤
• STEP1:スクリプトのあるフォルダに移動。
• ファイル>ディレクトリの変更をクリック
• スクリプトのあるフォルダをクリックしていって移動。
• STEP2:⾃分がいるディレクトリを確認(やらなくてもいいが念のため)
• getwd()
• STEP3:source(“ファイル名.R”)バシ
• スクリプトに書いてある「関数名()」という関数が利⽤できるようになる。
• source(“pro.nibai.R”)
• STEP4:関数名(1000)バシ
• nibai(1000)バシ
関数名(nibai)とファイル名(pro.nibai.R)が違うことを注意せよ。
復習問題
• xとyを⼊⼒し、これらの⾜し算を計算し、その答えを出⼒する関数
tashiをpro.tashi.Rに書き、プログラムが動くことを確認せよ。
• ⼊⼒:x,y
• 出⼒:xとyの和
• 5つの数字を⼊⼒し、その中から最⼩値を出⼒する関数saisyou5を
pro.saisyou5.Rに書き、プログラムが動くことを確認せよ。
• ⼊⼒:v,w,x,y,z
• 出⼒:v,w,x,y,zの中の最⼩値
• ⽂字列を⼊⼒し、”I am ⽂字”と出⼒する関数aiamuをpro.aiamu.Rに
書き、プログラムが動くことを確認せよ。
• ⼊⼒:⽂字列
• 出⼒:”I am” “⽂字列”
今⽇は条件分岐
条件分岐
• 「正の数は2倍して、負の数は3倍せよ」みたいな関数を作りた
い。
• ここまでくると完全にプログラミングだ。
• if,elseを使う。
正の数は2倍して、負の数は3倍する関
数
########################
kumaji <- function(x){
if(x >= 0){
y <- x*2
}
else{
y <- x*3
}
return(y)
}
##########################
kumaji(10); kumaji(-2)
条件分岐の型
if(x >= 0){
y <- x*2
}
else{
y <- x*3
}
if(条件式){
計算式1
}
else{
計算式2
⾏)
}
#(条件式を満たすとき、計算式1を実⾏)
#(条件式を満たさないとき、計算式2を実
条件式の書き⽅
• if(x==1)
#xが1に等しい
• if(x == “kumaji”)と⽂字列の条件も可能
• if(x!=1)
• if(x>=1)
• if(x>1)
• if(x<=1)
• if(x<1)
#xが1に等しくない
#xが1以上
#xが1より⼤きい
#xが1以下
#xが1より⼩さい
条件分岐の練習
• ⼊⼒が0のとき0を出⼒して、それ以外のとき-1を出⼒する関数
if.ren1をif.ren1.Rに書け
• 0以上の場合、”Larger than 0”、それ以外では、”Smaller than 0”と
出⼒する関数if.ren2をif.ren2.Rに書け
• ⼊⼒が100より⼤きい場合、100倍した数を出⼒、それ以外では2で
割った数を出⼒する関数if.ren3をif.ren3.Rに書け
• ⼊⼒が”kumaji”なら”teacher”、それ以外なら、”not teacher”と出⼒
する関数if.ren4をif.ren4.Rに書け
複数の条件分岐
0より⼩さい場合は-1を出⼒、0以上100より⼩さい場合は0、100以上の場合は1を出⼒す
る関数
#######################
fukusuu <- function(x){
if(x<0){
return(-1)
}
else if(x<100){
return(0)
}
else{
return(1)
}
}
#######################
fukusuu(-1), fukusuu(0), fukusuu(99), fukusuu(101)
複数分岐の練習
• 0より⼩さい場合は”negative”と出⼒、0より⼤きい場合
は”positive”と出⼒、それ以外は”zero”と出⼒する関数をプログ
ラミングせよ。
• 通話時間[秒]から通話料⾦[円]を計算する関数をプログラミン
グせよ。
• 3分未満は10円。それ以上は6秒ごとに1円づつ付加される。