一個函式是組合在一起以執行特定任務的一組語句。R具有大量內建函式,當然使用者也可以建立自己的功能。
在R中,函式是一個物件,所以R直譯器能夠將控制傳遞給函式,以將引數傳遞函式完成操作。
該函式又執行其任務並將控制權返回給直譯器以及可儲存在其他物件中的任何結果。
使用關鍵字function
來建立一個R函式。R函式定義的基本語法如下:
function_name <- function(arg_1, arg_2, ...) {
Function body
}
函式中有許多不同的部分,它們是 -
R具有許多內建函式,可以直接在程式中呼叫,而不必定義它們。我們還可以建立和使用自己建立的函式,稱為使用者定義函式。
內建函式的簡單範例有:seq()
,mean()
,max()
,sum(x)
和paste(...)
等。它們可在使用者編寫的程式直接呼叫。可以參考廣泛使用的R函式。
# Create a sequence of numbers from 32 to 44.
print(seq(32,44))
# Find mean of numbers from 25 to 82.
print(mean(25:82))
# Find sum of numbers frm 41 to 68.
print(sum(41:68))
當我們執行上述程式碼時,會產生以下結果 -
[1] 32 33 34 35 36 37 38 39 40 41 42 43 44
[1] 53.5
[1] 1526
我們可以在R中建立使用者定義的函式。它們用於實現使用者想要的功能,當建立了這些使用者自定義函式後,就可以像內建函式那樣使用。以下是如何建立和使用函式的範例 -
# Create a function to print squares of numbers in sequence.
new.function <- function(a) {
for(i in 1:a) {
b <- i^2
print(b)
}
}
呼叫函式
# Create a function to print squares of numbers in sequence.
new.function <- function(a) {
for(i in 1:a) {
b <- i^2
print(b)
}
}
# Call the function new.function supplying 6 as an argument.
new.function(10)
當我們執行上述程式碼時,會產生以下結果 -
[1] 1
[1] 4
[1] 9
[1] 16
[1] 25
[1] 36
[1] 49
[1] 64
[1] 81
[1] 100
呼叫沒有引數的函式
# Create a function without an argument.
new.function <- function() {
for(i in 10:20) {
print(i^2)
}
}
# Call the function without supplying an argument.
new.function()
當我們執行上述程式碼時,會產生以下結果 -
[1] 100
[1] 121
[1] 144
[1] 169
[1] 196
[1] 225
[1] 256
[1] 289
[1] 324
[1] 361
[1] 400
用引數值呼叫函式(按位元置和名稱)
函式呼叫的引數可以按照函式中定義的順序提供,也可以按不同的順序提供,只需要分配給引數的名稱即可。參考以下範例程式碼 -
# Create a function with arguments.
new.function <- function(a,b,c) {
result <- a * b + c
print(result)
}
# 按引數的順序來提供值呼叫
new.function(10,20,30)
# 按引數的名稱來提供值呼叫
new.function(a = 10, c = 30, b = 20)
當我們執行上述程式碼時,會產生以下結果 -
[1] 230
[1] 230
使用預設引數呼叫函式
我們可以在函式定義中定義引數的值,並呼叫函式,而不提供任何引數來獲取預設結果。 但是也可以通過提供引數的新值來獲取非預設參考值來呼叫這些函式。
# Create a function with arguments.
new.function <- function(a = 10, b = 20) {
result <- a * b
print(result)
}
# Call the function without giving any argument.
new.function()
# Call the function with giving new values of the argument.
new.function(11, 22)
當我們執行上述程式碼時,會產生以下結果 -
[1] 200
[1] 242
函式的引數被執行懶評估/求值,這表示它們只有在函式體需要的時候進行評估/求值。
# Create a function with arguments.
new.function <- function(a, b) {
print(a^2)
print(a)
print(b)
}
# Evaluate the function without supplying one of the arguments.
new.function(8)
當我們執行上述程式碼時,會產生以下結果 -
[1] 64
[1] 8
Error in print(b) : 缺少引數"b",也沒有預設值
如上所示,只有在print(b)
,才發現沒有提供引數b
的值。所以我們在編寫程式時要注意此類問題的發生,最好給定引數b
一個預設值。