農業情報学 第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円づつ付加される。
© Copyright 2024 ExpyDoc