R語言中大量的包提供了豐富的函數可以幫助我們解決數據處理中的各種問題。但是有時,我們還需要根據自己的需求來編寫自己的函數。
自定義函數概述
在R語言中,定義一個函數語法格式為:
functionname
expr
return (value)
其中,functionname為函數名稱;arglist為參數列表,若函數不需要參數可以省略;expr是函數要實現的功能代碼;value是函數的返回值,若無返回值,就不寫return部分。
下面舉幾個例子來說明一下具體用法。
無參函數
print_someinfo
{
print("Welcome to 頭條號 : 優美的代碼")
}
將該函數保存到文件後,可以在R編輯器中,選中所有代碼後,點擊工具欄上的“運行當前行或所選代碼”後,並在R控制檯中輸入:print_someinfo(),回車後,就可以看到運行的結果,如下圖所示:
雖然這個函數沒有參數,但在使用時,括號是不可以能省略的,即應輸入:print_someinfo()。
帶參數的函數
在大多數情況下,函數會根據用戶傳遞的參數執行一定的功能,如求樣本的均值,方差,全距等。這裡以求出一個向量中的最大值為例來說明有參函數的定義方法,編寫的程序代碼如下圖所示:
上圖中的最後兩行是使用該函數的一個例子,結果如下圖所示:
這裡給出的算法並不完美,它只適用於2個或2個以上元素的情況,當為一個元素時會報錯:
原因是循環是從第2個元素開始,但參數中的向量卻只有一個元素。讀者可以對這個函數進行改造,讓其也適用於只有一個元素的情況。
帶默認值參數的函數
我們可以給函數中的參數一個默認值,當調用該函數時,若沒有給該參數相應的值,函數就使用其提供的默認值來處理。下圖所示的是求三數中的最大者。程序如下圖所示:
調用時,若n2不給具體的值,則其會使用默認值0來處理。下面幾種格式都是合法的。
maxnum(1,2,3)
maxnum(1,n3=3)
maxnum(n1 = 1, n2 = 2, n3 = 4)
結果如下圖所示:
這個函數中參數n3必須使用參數名來調用,否則,會發生n3沒有賦值的錯誤,如下圖所示:
因為R按照給出的參數列表從左到右依次給每個參數賦值,如不用參數名,45會給了參數n2,造成沒有默認值的參數n3沒有賦值的錯誤。下圖所示的做法會更加合理些:即將帶默認值的參數都放在最後。
希望你能喜歡本篇文章,也希望你能關注本號,本號將持續更新R語言方面的文章,內容由基本語法的使用到具體的數據分析應用。