滿分共 100 分。
for loop 有許多用途,最常見的用途是寫爬蟲,之後老師上課會談。除此之外,for loop 最重要的用途在於節省時間,舉例來說,它可以幫助我們在短時間內讀取大量檔案。
在 "data/Lab03/"
路徑中,共有十個檔案,請撰寫一段程式碼,利用 for loop 讀取所有檔案,並合併至 df_all
,最後再印出結果。
hint01: 最簡單暴力的解法是寫十次 read.csv()/read_csv()
,最後全部 bind_rows()
,但如果不想寫十次該怎麼辦?
hint02: 可以搜尋 dir(path = "")
跟 str_c()
這兩個函數,理解它如何運行
### your code
### 寫作業
library(tidyverse)
<- dir(path = "data/Lab03/")
vector_file_name <- tibble()
df_all
for (i in 1:length(vector_file_name)) {
<- read_csv(str_c("data/Lab03/", vector_file_name[i]))
df_tmp <- df_all %>% bind_rows(df_tmp)
df_all
}
df_alldim(df_all)
#> # A tibble: 3,964 x 36
#> id date vaccines tests confirmed recovered deaths hosp vent icu
#> <chr> <date> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
#> 1 ARG 2020-01-22 NA 325 NA NA NA NA NA NA
#> 2 ARG 2020-01-23 NA 326 NA NA NA NA NA NA
#> 3 ARG 2020-01-24 NA NA NA NA NA NA NA NA
#> 4 ARG 2020-01-25 NA NA NA NA NA NA NA NA
#> 5 ARG 2020-01-26 NA 327 NA NA NA NA NA NA
#> 6 ARG 2020-01-27 NA 344 NA NA NA NA NA NA
#> 7 ARG 2020-01-28 NA 346 NA NA NA NA NA NA
#> 8 ARG 2020-01-29 NA 349 NA NA NA NA NA NA
#> 9 ARG 2020-01-30 NA 367 NA NA NA NA NA NA
#> 10 ARG 2020-01-31 NA 369 NA NA NA NA NA NA
#> # … with 3,954 more rows, and 26 more variables: population <dbl>,
#> # school_closing <dbl>, workplace_closing <dbl>, cancel_events <dbl>,
#> # gatherings_restrictions <dbl>, transport_closing <dbl>,
#> # stay_home_restrictions <dbl>, internal_movement_restrictions <dbl>,
#> # international_movement_restrictions <dbl>, information_campaigns <dbl>,
#> # testing_policy <dbl>, contact_tracing <dbl>, stringency_index <dbl>,
#> # iso_alpha_3 <chr>, iso_alpha_2 <chr>, iso_numeric <dbl>, currency <chr>,
#> # administrative_area_level <dbl>, administrative_area_level_1 <chr>,
#> # administrative_area_level_2 <lgl>, administrative_area_level_3 <lgl>,
#> # latitude <dbl>, longitude <dbl>, key <lgl>, key_apple_mobility <chr>,
#> # key_google_mobility <chr>
#> [1] 3964 36
使用他人開發的套件很方便,但實務上遇到的資料多變,為了達到特定目的,有時候還是需要捲起袖子自己寫函數。
舉例來說,你目前正擔任某堂課的助教,但因為同學的期中考成績太糟,需要調整分數,並給每位同學不同的鼓勵與祝福話語。請你撰寫一個名為 score_addoil()
的函數,當老師使用這個函數時,會輸入同學的姓名、原始分數,並會得到一段包含同學姓名、調整後分數、祝福話語的短文。
vector_addoil
隨機產出祝福話語score_addoil("子軒", 64)
會得到 "子軒,你的期中考分數經過調整後是 80 分,你很棒了"
score_addoil("蟹老闆", 90)
會得到 "蟹老闆,你的期中考分數經過調整後是 95 分,在我心中你是第一名"
score_addoil("古德", 50)
會得到 "古德,你的期中考分數經過調整後是 71 分,我很看好你喔"
因為是隨機產生,所以你的函數產出結果的祝福話語可能會和上面不一樣。下方提供一些提示讓你參考:
str_c()
這個函數, 隨機可以參考 sample()
這個函數<- c("你很棒了", "相信你可以的", "就快搞定了", "我知道你盡力了", "不輟喔",
vector_addoil "別給自己太多壓力", "我挺你", "我很看好你喔", "在我心中你是第一名")
### your code
<- function(name, score_original){
score_addoil <- ceiling(score_original^(0.5)*10)
score_new <- sample(vector_addoil, 1)
value_addoil print(str_c(name, ",你的期中考分數經過調整後是 ", score_new, " 分,", value_addoil))
}
score_addoil("子軒", 64)
score_addoil("蟹老闆", 90)
score_addoil("古德", 50)
#> [1] "子軒,你的期中考分數經過調整後是 80 分,在我心中你是第一名"
#> [1] "蟹老闆,你的期中考分數經過調整後是 95 分,不輟喔"
#> [1] "古德,你的期中考分數經過調整後是 71 分,相信你可以的"