今天要帶大家認識 R 語言的迴圈寫法。可能大家聽到 loop 都會有一點懼怕,覺得是比較複雜的程式語言。的確,寫 loop 是非常考驗邏輯的一件事,我自己初學程式語言時也是文之色變(現在好像也沒好到哪xdd),不過在經過多次嘗試後,已經很習慣 loop 的邏輯了!所以今天就簡單向大家介紹一下吧~
首先,為什麼要使用 loop 呢?在電腦的世界裡是一個口令(code)一個動作(執行),它不會舉一反三,所以你必須一直指定電腦該做些什麼。然而,當你要一直重複某個步驟時,一次一次慢慢執行是非常消耗時間的事。因此,產生了 loop。也就是說,你把你需要完成的事情,寫進一個 loop 裡面,這樣電腦就能一直重複這個步驟,直到你叫它停止,或是資料處理完畢為止。R 語言中的 loop 有三種:
在此,我們介紹最常用也最基礎的 for 迴圈
我們使用 Kaggle 這個平台上整理好 IMDB 電影評論這個檔案做示範。所以要先下載檔案並讀取資料(https://www.kaggle.com/datasets/PromptCloudHQ/imdb-data)
我們的目標是要新增一個 Comment 欄位,透過影評所打出來的分數給 "Must See", "OK" 和 "Bad Movie" 這三種較為直觀的評論。
data = read.csv("IMDB-Movie-Data.csv")
# 下載並讀取資料
head(data) # 我們先觀察一下資料
data <- data[!is.na(data$Metascore), ] # 去除 NA 值
result <-c() # 建立一個空的 list 來儲存 loop 的結果
#
for(i in seq_along(data$Rating)){# seq_along()是 data 的長度,我們鎖定 Rating 這個欄位的分數給出分類
if ((data$Rating[i] >= '8.0') & (data$Metascore[i] >='80') ){
result[i]= "Must See"
# 如果 Rating 分數大於等於 8.0 且 Metascore 分數大於等於 80,就評定為 "Must See" 並丟入 result 中 (小 i 代表重複的物件)
}else if ((data$Rating[i] < '5.0') & (data$Metascore[i] < '60')){
result[i]= "Bad movie"
# else if 代表其他條件。
}else{
# else 代表前面的條件都挑選完畢後剩下的該怎麼做
result[i]= "OK"
}
}
data$Comments = result # 建立 Comments 這個欄位在 data 裡,並且裡面的資料是來自 result 這個 list
head(data, 10) # 看看前 10 筆資料
執行結果為:
是不是快速又簡單呢?今天就到這邊,我們明天見~