R語言函數

一個函數是組合在一起以執行特定任務的一組語句。R語言具有大量內置函數,當然用戶也可以創建自己的功能。

在R語言中,函數是一個對象,所以R解釋器能夠將控制傳遞給函數,以將參數傳遞函數完成操作。

該函數又執行其任務並將控制權返回給解釋器以及可存儲在其他對象中的任何結果。

函數定義

使用關鍵字function來創建一個R函數。R函數定義的基本語法如下:

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

函數組件

函數中有許多不同的部分,它們是 -

  • 函數名稱 - 這是函數的實際名稱。 它以R名稱作爲對象存儲在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(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一個默認值。