學習軌道
/
R
R
/
練習
/
千層麵
千層麵

千層麵

學習練習

簡介

變數與賦值

R 是動態型別的語言,所以一般來說不需要指定變數的型別。建議使用的賦值運算子是<-。

x <- 42
avogadro <- 6.02e23
mystr <- "Hello, World!"

使用=取代<-通常可行,但並非總是如此,而且這被視為不良風格,不建議這麼做。 如果是在 RStudio 裡作業,可以用鍵盤快速鍵Alt-minus輸入。

運算子大多與一般慣例相同,但請注意%/%和%%:

2 + 3   # 5
2 - 3   # -1
2 * 3   # 6
2 / 3   # 0.6666667
8 %/% 3 # 2 (integer division)
8 %% 3  # 2 (remainder)
2 ^ 3   # 8 (exponential)

在 R 中,#代表單行註解的開頭。 多行註解則沒有另外的語法。

函式

定義函式的方式如下:

squareit <- function(x) {
    x * x
}

函式可以有零個或多個引數,並以逗號分隔。 即使沒有任何參數,function()後面仍需加上小括號()。

函式的引數可以指定預設值,但這些引數必須排在所有沒有預設值的引數之後,而且要用=而非<-來指定預設值。 來看一個沒什麼意義的範例:

squareit <- function(x = 42) {
    x * x
}

squareit()
#> [1] 1764

單行的函式主體其實不一定要加大括號{ },但加上去會被視為良好的風格。

R 會自動回傳函式最後的值,就像上面的範例一樣。

return()可以用在函式主體的任何地方,讓回傳值更明確。

呼叫函式的方式和許多其他語言相同:

squareit(3)
#> [1] 9

說明

在這份練習中,你會寫一些程式碼,幫助你依照最愛的食譜書做出美味的千層麵。

你有四個任務,全都和烹調千層麵所花費的時間有關。

1. 定義預期的烤箱時間(以分鐘計)

定義expected_minutes_in_oven()函式,它不接受任何參數,並回傳千層麵應該待在烤箱裡幾分鐘。根據食譜書,預期的烤箱時間是 60 分鐘。

> expected_minutes_in_oven()
[1] 60

2. 計算剩餘的烤箱時間(以分鐘計)

定義remaining_time_in_minutes函式,它把千層麵實際已經待在烤箱裡的分鐘數當作參數,並根據上一個任務算出的預期烤箱時間,回傳千層麵還需要待在烤箱裡幾分鐘。

> remaining_time_in_minutes(50)
[1] 10

3. 計算準備時間(以分鐘計)

定義prep_time_in_minutes()函式,它把你加在千層麵裡的層數當作參數,並回傳你準備千層麵花了幾分鐘,假設每一層要花你 2 分鐘準備。

> prep_time_in_minutes(2)
[1] 4

4. 計算經過的時間(以分鐘計)

定義elapsed_time_in_minutes函式,它接受兩個引數:第一個引數是你加在千層麵裡的層數,第二個參數是千層麵已經待在烤箱裡的分鐘數。這個函式應該回傳你烹調千層麵總共花了幾分鐘,也就是準備時間的分鐘數,加上千層麵當下已經待在烤箱裡的分鐘數的總和。

> elapsed_time_in_minutes(3, 20)
[1] 26
透過 GitHub 編輯 連結會在新視窗或分頁中開啟
R Exercism

準備好開始 千層麵 了嗎?

註冊 Exercism,透過 21 個概念111 個練習 和真人引導來學習並精通 R,全部免費。