天天看點

R 函數

函數是一組一起執行一個任務的語句。R 語言本身提供了很多的内置函數,當然我們也可以自己建立函數。

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

函數<b>聲明</b>告訴編譯器函數的名稱、傳回類型和參數。函數<b>定義</b>提供了函數的實際主體。

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

R 語言中的函數定義使用 function 關鍵字,一般形式如下:

說明:

function_name : 為函數名

arg_1, arg_2, ... : 形式參數清單

函數傳回值使用 return()。

R 語言提供了很多有用的内置函數,我們無需定義它就可以直接使用。

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

# 輸出  32 到 44 到的所有數字

print(seq(32,44))

# 計算兩個數到平均數

print(mean(25:82))

# 計算 41 到 68 所有數字之和

print(sum(41:68))

執行以上代碼,輸出結果為:

我們可以自己建立函數,用于特定到功能,定義後可以向内置函數一樣使用它們。

下面示範兩如何自定義函數:

# 定義一個函數,用于計數一個系列到平方值

new.function &lt;- function(a) {

   for(i in 1:a) {

      b &lt;- i^2

      print(b)

   }

}

接下來我們可以調用函數:

    for(i in 1:a) {

       b &lt;- i^2

       print(b)

    }

 }

# 調用函數,并傳遞參數

new.function(6)

我們也可以建立一個不帶參數的函數:

new.function &lt;- function() {

    for(i in 1:5) {

        print(i^2)

}      

# 調用函數,不需要傳遞參數

new.function()

函數參數,可以按函數建立時的順序來傳遞,也可以不按順序,但需要指定參數名:

# 建立函數

new.function &lt;- function(a,b,c) {

   result &lt;- a * b + c

   print(result)

# 不帶參數名

new.function(5,3,11)

# 帶參數名

new.function(a = 11, b = 5, c = 3)

函數建立時也可以為參數指定預設值,如果調用的時候不傳遞參數就會使用預設值:

# 建立帶預設參數的函數

new.function &lt;- function(a = 3, b = 6) {

   result &lt;- a * b

# 調用函數,但不傳遞參數,會使用預設的

# 調用函數,傳遞參數

new.function(9,5)

[1] 18

[1] 45

懶惰計算将推遲計算工作直到系統需要這些計算的結果。如果不需要結果,将不用進行計算。

預設情況下,R 函數對參數的計算是懶惰的,就是隻有我們在計算它的時候才會調用:

f &lt;- function(x) {

  10

f()

以上代碼執行,并沒有報錯,雖然我們沒有傳入參數,但函數體内沒有使用參數 x,是以不會去調用它,也不會報錯。

new.function &lt;- function(a, b) {

   print(a^2)

   print(a)

   print(b)  # 使用到 b,但未傳入,是以會報錯

# 傳入一個參數