R語言中提供了大量的內置函數為用戶解決有關問題,同時,R語言中允許用戶編寫自己的函數來解決實際問題。
R語言中定義自己的函數語法格式:
functionname <- function( arglist ) expr
return (value)
上面的語法中,functionname為自己定義的函數名稱;arglist是函數的參數列表,可以沒有參數,也可以有1個到多個參數;expr是自己編寫的相關語句;value是返回值,如沒有返回值,可以不寫return部分。
編寫函數時可以使用R編輯器的程序腳本功能來編寫:在R軟件中選擇菜單“文件”—>"新建程序腳本",打開“R編輯器”,編寫自己的函數程序。編輯完后,選擇菜單“文件”—>“保存”,輸入函數的文件名即可。在使用時,需要將函數加載到R中:可以使用菜單“文件”—>“運行R腳本文件”,然后選擇要運行的函數,或者執行代碼“source(函數名所在文件名.R)”即可。
如在R軟件下直接編寫的函數,可以直接調用。
下面舉幾個例子來說明一下具體用法:
(1)無參函數
welcom<-function()
{
print("Welcome to my site:www.companysz.com")
}
將該函數保存到文件
該函數執行時,不需要給出參數,其作用是輸出一行字符串:Welcome to my site:www.companysz.com.
(2)帶參數的函數
編寫一個函數,求出向量中的最大值
maxvalue<-function(x)
{
if(length(x)==0)
stop("參數x不能為空值。");
maxv<-x[1]
for(i in 2:length(x))
if(x[i] > maxv)
maxv <- x[i]
return(maxv)
}
如使用本函數求下面向量X的值
X<-c(11,34,21,38,71,29)
maxvalue(X)
輸出:71
(3)帶默認參數的函數
有時一個函數中有多個參數時,部分參數可能在一些情況下用戶不必提供或用戶無法提供時,可以使用默認值。
編寫一個函數,求出三個數的最大值
maxnum<-function(n1,n2=0,n3)
{
maxn <- n1
if(n2 > maxn)
maxn <- n2
if(n3 > maxn)
maxn <- n3
return(maxn)
}
這個自定義函數中,n2使用了默認值0,在調用時,下面幾種格式都是合法的。
maxnum(1,2,3)
maxnum(1,n3=3)
上面第二個調用中,參數n2沒有給出值,則會使用其默認值,但n3必須使用參數名來調用,否則,會發生n3沒有賦值的錯誤,因為R會按照給出的參數列表從左到右依次給每個參數賦值,如不用參數名,3會給了參數n2,造成沒有默認值的參數n3沒有賦值的錯誤。
最好的做法是,將帶有默認值的參數放在所有參數的后面。
新聞熱點
疑難解答