函數是一組一起執行一個任務的語句。R 語言本身提供了很多的内置函數,當然我們也可以自己建立函數。
您可以把代碼劃分到不同的函數中。如何劃分代碼到不同的函數中是由您來決定的,但在邏輯上,劃分通常是根據每個函數執行一個特定的任務來進行的。
函數<b>聲明</b>告訴編譯器函數的名稱、傳回類型和參數。函數<b>定義</b>提供了函數的實際主體。
R 語言中函數是一個對象,可以擁有屬性。
R 語言中的函數定義使用 function 關鍵字,一般形式如下:
說明:
function_name : 為函數名
arg_1, arg_2, ... : 形式參數清單
函數傳回值使用 return()。
R 語言提供了很多有用的内置函數,我們無需定義它就可以直接使用。
例如:seq(), mean(), max(), sum(x) 以及 paste(...) 等。
# 輸出 32 到 44 到的所有數字
print(seq(32,44))
# 計算兩個數到平均數
print(mean(25:82))
# 計算 41 到 68 所有數字之和
print(sum(41:68))
執行以上代碼,輸出結果為:
我們可以自己建立函數,用于特定到功能,定義後可以向内置函數一樣使用它們。
下面示範兩如何自定義函數:
# 定義一個函數,用于計數一個系列到平方值
new.function <- function(a) {
for(i in 1:a) {
b <- i^2
print(b)
}
}
接下來我們可以調用函數:
for(i in 1:a) {
b <- i^2
print(b)
}
}
# 調用函數,并傳遞參數
new.function(6)
我們也可以建立一個不帶參數的函數:
new.function <- function() {
for(i in 1:5) {
print(i^2)
}
# 調用函數,不需要傳遞參數
new.function()
函數參數,可以按函數建立時的順序來傳遞,也可以不按順序,但需要指定參數名:
# 建立函數
new.function <- function(a,b,c) {
result <- a * b + c
print(result)
# 不帶參數名
new.function(5,3,11)
# 帶參數名
new.function(a = 11, b = 5, c = 3)
函數建立時也可以為參數指定預設值,如果調用的時候不傳遞參數就會使用預設值:
# 建立帶預設參數的函數
new.function <- function(a = 3, b = 6) {
result <- a * b
# 調用函數,但不傳遞參數,會使用預設的
# 調用函數,傳遞參數
new.function(9,5)
[1] 18
[1] 45
懶惰計算将推遲計算工作直到系統需要這些計算的結果。如果不需要結果,将不用進行計算。
預設情況下,R 函數對參數的計算是懶惰的,就是隻有我們在計算它的時候才會調用:
f <- function(x) {
10
f()
以上代碼執行,并沒有報錯,雖然我們沒有傳入參數,但函數體内沒有使用參數 x,是以不會去調用它,也不會報錯。
new.function <- function(a, b) {
print(a^2)
print(a)
print(b) # 使用到 b,但未傳入,是以會報錯
# 傳入一個參數