這份作業希望能夠讓你熟習於在 R 裡面的流程控制(control flow),主要練習條件判斷與迴圈,並實際撰寫函數,題目共有三題。
第一題希望你用條件判斷和迴圈拼出一段程式碼,題目敘述看起來有些荒謬,但現實世界中有可以對應、正常一些的例子。
第二題則是將第一題改寫成函數,這樣的過程在後面擷取網頁資料時會用到,舉例來說,你可能想抓 PTT 上 NTUCourse 板上的資料,第一次你寫了一個迴圈,半個月之後你想抓 KoreaDrama 板上的資料,所以改寫之前的程式碼,或者乾脆重新寫了一次,若相同的過程不斷重複,將前面的程式碼改寫成函數,就是相對較有效率的做法。
第三題和前兩題無關,希望你寫一個輸入日期、輸出星座的函數,利用 Yahoo 或 Google Search 其實就可以搜到很多類似功能的網站,但現在的你也完全有能力寫出相同的東西。
希望你在實作的過程中有所學習,雖然遇到 error 或卡住的時候會心情很悶,但這種壓力可以刺激成長,如同《一流的人如何保持顛峰》所說,在成為頂尖高手的路上需要拼搏(努力),而拼搏需要面對建設性挫敗(productive failure),而非讓人愉悅的練習,希望在這份作業中你越挫越勇,並且記得休息唷!
滿分 120 分,超過 100 分會以實際分數登記 e.g. 118 分。
有位同學小軒非常偏食,又會因為某些原因恣意的拒吃某些店家。請依照小軒的飲食禁忌,利用迴圈與條件判斷,印出一週中每天各自小軒會吃的店家。
上面的條件看來有些複雜,下方提供提示:
str_length()
函數,像是str_length("小軒")
的結果是 2str_detect(字串, "關鍵字")
判斷,舉例來說,str_detect("信陽麵館", "館")
會得到 TRUEstr_detect()
,記得先安裝 tidyverse
or stringr
後載入套件### your code
# install.packages("tidyverse")
# library(tidyverse)
# library(stringr)
<- c("五九麵館", "親來食堂", "憶馬當鮮", "揪食堂韓國餐館",
vector_shop "找碗", "大李水餃", "李記水餃", "林師傅", "馬祖麵館")
<- c("週一", "週二", "週三", "週四", "週五", "週六", "週日")
vector_weekday
### result should be
# [1] "週一小軒吃揪食堂韓國餐館"
# [1] "週一小軒吃林師傅"
# [1] "週二小軒吃大李水餃"
# [1] "週二小軒吃李記水餃"
# [1] "週三小軒吃揪食堂韓國餐館"
# [1] "週三小軒吃林師傅"
# [1] "週四小軒吃大李水餃"
# [1] "週四小軒吃李記水餃"
# [1] "週五小軒吃揪食堂韓國餐館"
# [1] "週五小軒吃林師傅"
# [1] "週六小軒吃五九麵館"
# [1] "週六小軒吃揪食堂韓國餐館"
# [1] "週六小軒吃馬祖麵館"
# [1] "週日小軒都不吃"
承接上題,請將上方迴圈改寫為名為 hsuan_meal()
的函數,小軒使用此函數時會輸入當週的第幾天 e.g. 週一,以及店家名稱,並依照飲食條件得到結果。
hsuan_meal("週一", "林師傅")
會得到 週一小軒吃林師傅
hsuan_meal("週二", "親來食堂")
會得到 週二小軒不吃親來食堂
hsuan_meal("週日", "找碗")
會得到 週日小軒不吃找碗
<- c("五九麵館", "親來食堂", "憶馬當鮮", "揪食堂韓國餐館",
vector_shop "找碗", "大李水餃", "李記水餃", "林師傅", "馬祖麵館")
<- c("週一", "週二", "週三", "週四", "週五", "週六", "週日")
vector_weekday
### your code
### result should be
# hsuan_meal("週一","林師傅")
# [1] "週一小軒吃林師傅"
# hsuan_meal("週二","親來食堂")
# [1] "週二小軒不吃親來食堂"
# hsuan_meal("週日","找碗")
# [1] "週日小軒不吃找碗"
請撰寫一個函數 get_zodiac()
,使用者輸入生日(字串或者數值,底下會舉例),該函數便會告訴你所屬的星座。 不能使用他人開發好的現成函數,要自己寫喔。
可以利用條件判斷(if else)來比較日期,你會用到很多 if else
可以利用 library(lubridate)
處理使用者輸入的日期,有幾個可以用的函數譬如 as_date()
, month()
, day()
如果對方亂輸入,要跳出一段訊息,這邊也可以用 if else 解決
預期結果舉例:
get_zodiac("1996-09-25")
會得到 天秤座
get_zodiac("1996-09-01")
會得到 處女座
get_zodiac(19970101)
會得到 魔羯座
get_zodiac("一九九八三月十四日")
會得到 請以'YYYY-MM-DD'格式輸入數字
我會輸入上面以外的測資,所以不要僅寫針對上面四個輸入值的 if else 喔!
### your code
# get_zodiac <- function(){
#
# }
### test your code
# get_zodiac("1996-09-25")
# get_zodiac("1996-09-01")
# get_zodiac(19970101)
# get_zodiac("一九九八三月十四日")