R語言中提供了大量的內置函數(shù)為用戶解決有關問題,同時,R語言中允許用戶編寫自己的函數(shù)來解決實際問題。
R語言中定義自己的函數(shù)語法格式:
functionname <- function( arglist ) expr
return (value)
上面的語法中,functionname為自己定義的函數(shù)名稱;arglist是函數(shù)的參數(shù)列表,可以沒有參數(shù),也可以有1個到多個參數(shù);expr是自己編寫的相關語句;value是返回值,如沒有返回值,可以不寫return部分。
編寫函數(shù)時可以使用R編輯器的程序腳本功能來編寫:在R軟件中選擇菜單“文件”—>"新建程序腳本",打開“R編輯器”,編寫自己的函數(shù)程序。編輯完后,選擇菜單“文件”—>“保存”,輸入函數(shù)的文件名即可。在使用時,需要將函數(shù)加載到R中:可以使用菜單“文件”—>“運行R腳本文件”,然后選擇要運行的函數(shù),或者執(zhí)行代碼“source(函數(shù)名所在文件名.R)”即可。
如在R軟件下直接編寫的函數(shù),可以直接調用。

下面舉幾個例子來說明一下具體用法:
(1)無參函數(shù)
welcom<-function()
{
print("Welcome to my site:www.49028c.com")
}
將該函數(shù)保存到文件
該函數(shù)執(zhí)行時,不需要給出參數(shù),其作用是輸出一行字符串:Welcome to my site:www.49028c.com.
(2)帶參數(shù)的函數(shù)
編寫一個函數(shù),求出向量中的最大值
maxvalue<-function(x)
{
if(length(x)==0)
stop("參數(shù)x不能為空值。");
maxv<-x[1]
for(i in 2:length(x))
if(x[i] > maxv)
maxv <- x[i]
return(maxv)
}
如使用本函數(shù)求下面向量X的值
X<-c(11,34,21,38,71,29)
maxvalue(X)
輸出:71
(3)帶默認參數(shù)的函數(shù)
有時一個函數(shù)中有多個參數(shù)時,部分參數(shù)可能在一些情況下用戶不必提供或用戶無法提供時,可以使用默認值。
編寫一個函數(shù),求出三個數(shù)的最大值
maxnum<-function(n1,n2=0,n3)
{
maxn <- n1
if(n2 > maxn)
maxn <- n2
if(n3 > maxn)
maxn <- n3
return(maxn)
}
這個自定義函數(shù)中,n2使用了默認值0,在調用時,下面幾種格式都是合法的。
maxnum(1,2,3)
maxnum(1,n3=3)
上面第二個調用中,參數(shù)n2沒有給出值,則會使用其默認值,但n3必須使用參數(shù)名來調用,否則,會發(fā)生n3沒有賦值的錯誤,因為R會按照給出的參數(shù)列表從左到右依次給每個參數(shù)賦值,如不用參數(shù)名,3會給了參數(shù)n2,造成沒有默認值的參數(shù)n3沒有賦值的錯誤。
最好的做法是,將帶有默認值的參數(shù)放在所有參數(shù)的后面。
新聞熱點
疑難解答