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
在這份練習中,你會寫一些程式碼,幫助你依照最愛的食譜書做出美味的千層麵。
你有四個任務,全都和烹調千層麵所花費的時間有關。
定義expected_minutes_in_oven()函式,它不接受任何參數,並回傳千層麵應該待在烤箱裡幾分鐘。根據食譜書,預期的烤箱時間是 60 分鐘。
> expected_minutes_in_oven()
[1] 60
定義remaining_time_in_minutes函式,它把千層麵實際已經待在烤箱裡的分鐘數當作參數,並根據上一個任務算出的預期烤箱時間,回傳千層麵還需要待在烤箱裡幾分鐘。
> remaining_time_in_minutes(50)
[1] 10
定義prep_time_in_minutes()函式,它把你加在千層麵裡的層數當作參數,並回傳你準備千層麵花了幾分鐘,假設每一層要花你 2 分鐘準備。
> prep_time_in_minutes(2)
[1] 4
定義elapsed_time_in_minutes函式,它接受兩個引數:第一個引數是你加在千層麵裡的層數,第二個參數是千層麵已經待在烤箱裡的分鐘數。這個函式應該回傳你烹調千層麵總共花了幾分鐘,也就是準備時間的分鐘數,加上千層麵當下已經待在烤箱裡的分鐘數的總和。
> elapsed_time_in_minutes(3, 20)
[1] 26