R 函數(shù)

函數(shù)是一組一起執(zhí)行一個任務(wù)的語句。R 語言本身提供了很多的內(nèi)置函數(shù),當(dāng)然我們也可以自己創(chuàng)建函數(shù)。

您可以把代碼劃分到不同的函數(shù)中。如何劃分代碼到不同的函數(shù)中是由您來決定的,但在邏輯上,劃分通常是根據(jù)每個函數(shù)執(zhí)行一個特定的任務(wù)來進(jìn)行的。

函數(shù)聲明告訴編譯器函數(shù)的名稱、返回類型和參數(shù)。函數(shù)定義提供了函數(shù)的實際主體。

R 語言中函數(shù)是一個對象,可以擁有屬性。

定義函數(shù)

R 語言中的函數(shù)定義使用 function 關(guān)鍵字,一般形式如下:

function_name <- function(arg_1, arg_2, ...) {
    // 函數(shù)體
}

說明:

  • function_name  : 為函數(shù)名

  • arg_1, arg_2, ... : 形式參數(shù)列表

函數(shù)返回值使用 return()。

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

R 語言提供了很多有用的內(nèi)置函數(shù),我們無需定義它就可以直接使用。

例如:seq(), mean(), max(), sum(x) 以及 paste(...) 等。

# 輸出  32 到 44 到的所有數(shù)字
print(seq(32,44))

# 計算兩個數(shù)到平均數(shù)
print(mean(25:82))

# 計算 41 到 68 所有數(shù)字之和
print(sum(41:68))

執(zhí)行以上代碼,輸出結(jié)果為:

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

自定義函數(shù)

我們可以自己創(chuàng)建函數(shù),用于特定到功能,定義后可以向內(nèi)置函數(shù)一樣使用它們。

下面演示兩如何自定義函數(shù):

# 定義一個函數(shù),用于計數(shù)一個系列到平方值
new.function <- function(a) {
   for(i in 1:a) {
      b <- i^2
      print(b)
   }
}

接下來我們可以調(diào)用函數(shù):

new.function <- function(a) {
    for(i in 1:a) {
       b <- i^2
       print(b)
    }
 }
 
# 調(diào)用函數(shù),并傳遞參數(shù)
new.function(6)

執(zhí)行以上代碼,輸出結(jié)果為:

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

我們也可以創(chuàng)建一個不帶參數(shù)的函數(shù):

new.function <- function() {
    for(i in 1:5) {
        print(i^2)
    }
}       
 
# 調(diào)用函數(shù),不需要傳遞參數(shù)
new.function()

執(zhí)行以上代碼,輸出結(jié)果為:

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

帶有參數(shù)值的函數(shù)

函數(shù)參數(shù),可以按函數(shù)創(chuàng)建時的順序來傳遞,也可以不按順序,但需要指定參數(shù)名:

# 創(chuàng)建函數(shù)
new.function <- function(a,b,c) {
   result <- a * b + c
   print(result)
}

# 不帶參數(shù)名
new.function(5,3,11)

# 帶參數(shù)名
new.function(a = 11, b = 5, c = 3)

執(zhí)行以上代碼,輸出結(jié)果為:

[1] 26
[1] 58

函數(shù)創(chuàng)建時也可以為參數(shù)指定默認(rèn)值,如果調(diào)用的時候不傳遞參數(shù)就會使用默認(rèn)值:

# 創(chuàng)建帶默認(rèn)參數(shù)的函數(shù)
new.function <- function(a = 3, b = 6) {
   result <- a * b
   print(result)
}

# 調(diào)用函數(shù),但不傳遞參數(shù),會使用默認(rèn)的
new.function()

# 調(diào)用函數(shù),傳遞參數(shù)
new.function(9,5)

執(zhí)行以上代碼,輸出結(jié)果為:

[1] 18 [1] 45

懶惰計算的函數(shù)

懶惰計算將推遲計算工作直到系統(tǒng)需要這些計算的結(jié)果。如果不需要結(jié)果,將不用進(jìn)行計算。

默認(rèn)情況下,R 函數(shù)對參數(shù)的計算是懶惰的,就是只有我們在計算它的時候才會調(diào)用:

f <- function(x) {
  10
}
f()

執(zhí)行以上代碼,輸出結(jié)果為:

[1] 10

以上代碼執(zhí)行,并沒有報錯,雖然我們沒有傳入?yún)?shù),但函數(shù)體內(nèi)為使用參數(shù) x,所以不會去調(diào)用它,也不會報錯。

new.function <- function(a, b) {
   print(a^2)
   print(a)
   print(b)  # 使用到 b,但未傳入,所以會報錯
}

# 傳入一個參數(shù)
new.function(6)

執(zhí)行以上代碼,輸出結(jié)果為:

[1] 36
[1] 6
Error in print(b) : 缺少參數(shù)"b",也沒有缺省值
Calls: new.function -> print
停止執(zhí)行
丰满人妻一级特黄a大片,午夜无码免费福利一级,欧美亚洲精品在线,国产婷婷成人久久Av免费高清