鍍金池/ 教程/ 數(shù)據(jù)分析&挖掘/ R語言函數(shù)
R語言列表
R語言隨機森林
R語言矩陣
R語言邏輯回歸
R語言數(shù)據(jù)幀
R語言數(shù)據(jù)重塑
R語言概述
R語言包
R語言字符串
R語言CSV文件
R語言運算符
為什么使用R語言做統(tǒng)計?
R語言Web數(shù)據(jù)
R語言二進(jìn)制文件
R語言XML文件
R語言JSON文件
R語言因子
R語言容易學(xué)習(xí)嗎?
R語言基礎(chǔ)語法
R語言向量
R語言教程
R語言正態(tài)分布
R語言平均值,中位數(shù)和眾數(shù)
R語言變量
R語言條形圖
R語言決策樹
R語言開發(fā)環(huán)境安裝配置
R語言數(shù)組
R語言數(shù)據(jù)類型
R語言非線性最小二乘法
R語言直方圖
R語言卡方檢驗
R語言泊松回歸
R語言決策結(jié)構(gòu)
R語言盒形圖(箱形圖)
R語言協(xié)方差分析
R語言二項分布
R語言餅狀圖
R語言循環(huán)
R語言散點圖
R語言線性回歸
R語言時間序列分析
R語言線形圖
R語言在現(xiàn)實中的應(yīng)用
R語言生存分析
R語言多元(多重)回歸
R語言函數(shù)
R語言Excel文件
R語言連接數(shù)據(jù)庫(MySQL)

R語言函數(shù)

一個函數(shù)是組合在一起以執(zhí)行特定任務(wù)的一組語句。R具有大量內(nèi)置函數(shù),當(dāng)然用戶也可以創(chuàng)建自己的功能。

在R中,函數(shù)是一個對象,所以R解釋器能夠?qū)⒖刂苽鬟f給函數(shù),以將參數(shù)傳遞函數(shù)完成操作。

該函數(shù)又執(zhí)行其任務(wù)并將控制權(quán)返回給解釋器以及可存儲在其他對象中的任何結(jié)果。

函數(shù)定義

使用關(guān)鍵字function來創(chuàng)建一個R函數(shù)。R函數(shù)定義的基本語法如下:

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

函數(shù)組件

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

  • 函數(shù)名稱 - 這是函數(shù)的實際名稱。 它以R名稱作為對象存儲在R環(huán)境中。
  • 參數(shù) - 參數(shù)是一個占位符。調(diào)用函數(shù)時,將值傳遞給參數(shù)。參數(shù)是可選的; 也就是說,函數(shù)可能不包含參數(shù)。參數(shù)也可以有默認(rèn)值。
  • 函數(shù)體 - 函數(shù)體包含一組語句,用于定義函數(shù)的作用。
  • 返回值 - 函數(shù)的返回值是要評估/計算的函數(shù)體中的最后一個表達(dá)式。

R具有許多內(nèi)置函數(shù),可以直接在程序中調(diào)用,而不必定義它們。我們還可以創(chuàng)建和使用自己創(chuàng)建的函數(shù),稱為用戶定義函數(shù)。

內(nèi)置函數(shù)

內(nèi)置函數(shù)的簡單示例有:seq(),mean(),max()sum(x)paste(...)等。它們可在用戶編寫的程序直接調(diào)用??梢詤⒖?a target="_blank" title="廣泛使用的R函數(shù)">廣泛使用的R函數(shù)。

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

當(dāng)我們執(zhí)行上述代碼時,會產(chǎn)生以下結(jié)果 -

[1] 32 33 34 35 36 37 38 39 40 41 42 43 44
[1] 53.5
[1] 1526

用戶自定義函數(shù)

我們可以在R中創(chuàng)建用戶定義的函數(shù)。它們用于實現(xiàn)用戶想要的功能,當(dāng)創(chuàng)建了這些用戶自定義函數(shù)后,就可以像內(nèi)置函數(shù)那樣使用。以下是如何創(chuàng)建和使用函數(shù)的示例 -

# Create a function to print squares of numbers in sequence.
new.function <- function(a) {
   for(i in 1:a) {
      b <- i^2
      print(b)
   }
}

調(diào)用函數(shù)

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

當(dāng)我們執(zhí)行上述代碼時,會產(chǎn)生以下結(jié)果 -

[1] 1
[1] 4
[1] 9
[1] 16
[1] 25
[1] 36
[1] 49
[1] 64
[1] 81
[1] 100

調(diào)用沒有參數(shù)的函數(shù)

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

當(dāng)我們執(zhí)行上述代碼時,會產(chǎn)生以下結(jié)果 -

[1] 100
[1] 121
[1] 144
[1] 169
[1] 196
[1] 225
[1] 256
[1] 289
[1] 324
[1] 361
[1] 400

用參數(shù)值調(diào)用函數(shù)(按位置和名稱)

函數(shù)調(diào)用的參數(shù)可以按照函數(shù)中定義的順序提供,也可以按不同的順序提供,只需要分配給參數(shù)的名稱即可。參考以下示例代碼 -

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

# 按參數(shù)的順序來提供值調(diào)用
new.function(10,20,30)

# 按參數(shù)的名稱來提供值調(diào)用
new.function(a = 10, c = 30, b = 20)

當(dāng)我們執(zhí)行上述代碼時,會產(chǎn)生以下結(jié)果 -

[1] 230
[1] 230

使用默認(rèn)參數(shù)調(diào)用函數(shù)

我們可以在函數(shù)定義中定義參數(shù)的值,并調(diào)用函數(shù),而不提供任何參數(shù)來獲取默認(rèn)結(jié)果。 但是也可以通過提供參數(shù)的新值來獲取非默認(rèn)參考值來調(diào)用這些函數(shù)。

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

當(dāng)我們執(zhí)行上述代碼時,會產(chǎn)生以下結(jié)果 -

[1] 200
[1] 242

懶惰計算函數(shù)

函數(shù)的參數(shù)被執(zhí)行懶評估/求值,這表示它們只有在函數(shù)體需要的時候進(jìn)行評估/求值。

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

當(dāng)我們執(zhí)行上述代碼時,會產(chǎn)生以下結(jié)果 -

[1] 64
[1] 8
Error in print(b) : 缺少參數(shù)"b",也沒有缺省值

如上所示,只有在print(b),才發(fā)現(xiàn)沒有提供參數(shù)b的值。所以我們在編寫程序時要注意此類問題的發(fā)生,最好給定參數(shù)b一個默認(rèn)值。