R - 函式



函式是一組組織在一起以執行特定任務的語句。R 具有大量的內建函式,使用者可以建立自己的函式。

在 R 中,函式是一個物件,因此 R 直譯器能夠將控制權傳遞給函式,以及函式完成操作可能需要的引數。

函式依次執行其任務並將控制權以及任何可能儲存在其他物件中的結果返回給直譯器。

函式定義

R 函式是使用關鍵字function建立的。R 函式定義的基本語法如下:

function_name <- function(arg_1, arg_2, ...) {
   Function body 
}

函式組成部分

函式的不同部分包括:

  • 函式名 - 這是函式的實際名稱。它作為具有此名稱的物件儲存在 R 環境中。

  • 引數 - 引數是一個佔位符。呼叫函式時,您將值傳遞給引數。引數是可選的;也就是說,函式可能不包含任何引數。引數也可以具有預設值。

  • 函式體 - 函式體包含定義函式作用的一組語句。

  • 返回值 - 函式的返回值是函式體中要計算的最後一個表示式。

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(6)

當我們執行上述程式碼時,它會產生以下結果:

[1] 1
[1] 4
[1] 9
[1] 16
[1] 25
[1] 36

不帶引數呼叫函式

# Create a function without an argument.
new.function <- function() {
   for(i in 1:5) {
      print(i^2)
   }
}	

# Call the function without supplying an argument.
new.function()

當我們執行上述程式碼時,它會產生以下結果:

[1] 1
[1] 4
[1] 9
[1] 16
[1] 25

使用引數值呼叫函式(按位置和按名稱)

函式呼叫的引數可以按照函式中定義的相同順序提供,也可以按照不同的順序提供,但分配給引數的名稱。

# Create a function with arguments.
new.function <- function(a,b,c) {
   result <- a * b + c
   print(result)
}

# Call the function by position of arguments.
new.function(5,3,11)

# Call the function by names of the arguments.
new.function(a = 11, b = 5, c = 3)

當我們執行上述程式碼時,它會產生以下結果:

[1] 26
[1] 58

使用預設引數呼叫函式

我們可以在函式定義中定義引數的值,並在不提供任何引數的情況下呼叫函式以獲得預設結果。但是我們也可以透過提供引數的新值來呼叫此類函式,並獲得非預設結果。

# Create a function with arguments.
new.function <- function(a = 3, b = 6) {
   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(9,5)

當我們執行上述程式碼時,它會產生以下結果:

[1] 18
[1] 45

函式的惰性求值

函式的引數是惰性求值的,這意味著它們僅在函式體需要時才求值。

# 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(6)

當我們執行上述程式碼時,它會產生以下結果:

[1] 36
[1] 6
Error in print(b) : argument "b" is missing, with no default
廣告