10.1 函式的定義
> name <- function(arg_1, arg_2, ...) expression
expression是乙個r表示式(通常是表示式語句組),並使用引數arg_i來計算出乙個數值,表示式的值就是函式的返回值。
函式呼叫的形式通常都是name(expr1,expr2,...)
10.2 定義新的二元操作符
可以將函式定義為新的二元操作符:
>"%!%" <- function(x, y)
正如矩陣乘法運算子,%*%,和矩陣外積運算子%o%
10.3 指定引數和預設值
如果被呼叫函式的引數按照"name = obj"的形式給出,那麼引數的次序可以是任意的。
而且,引數序列可以在開始依次序給出,而將指定名稱的引數置於後面。
因此,如果由乙個函式fun1被定義為
> fun1 <- function(data, data.frame, graph, limit)
那麼函式可以有多種等價的使用方法,例如
> ans <- fun1(d, df, true, 20)
> ans <- fun1(d, df, graph=true, limit=20)
> ans <- fun1(data=d, limit=20, graph=true, data.frame=df)
預設值 :在很多情況下,引數都會被賦予乙個普遍適用的預設值。
> fun1 <- function(data, data.frame, graph=true, limit=20)
則函式可以這樣被呼叫
> ans <- fun1(d, df)
此時與上面三種情況等價,也可以這樣呼叫
> ans <- fun1(d, df, limit=10)
此時改變了乙個預設值。
note:引數可以是任意表示式,甚至可以是包含其他引數的表示式;
10.4 額外引數「...」
當需要將乙個函式的引數傳遞給另乙個函式時,可以通過包含乙個額外的引數"..."實現。
fun1 <- function(data, data.frame, graph=true, limit=20, ...)
10.5 全域性變數和區域性變數
函式內的賦值都是區域性變數,退出函式就丟失了。
如果要在函式內進行永久賦值(定義全域性變數),需要用到「超賦值」操作符, <<-或者函式assign()。
10.6 一些高階示例
區組設計的效率因子 (e±ciency factors)
刪除列印陣列中的所有名稱
遞迴的數值積分
10.7 範疇(scope)
函式主體內出現的標識(symbol)可以被分為3類;正式引數、區域性變數和自由變數。
正式引數就是出現在函式引數列表中的引數,他們的值由實際的函式引數與正式引數的繫結(binding)過程決定。
區域性變數是在引數主體中,由表示式求值過程決定的變數。
自由變數為既不是正式引數又不是區域性變數的變數。賦值之後自由變數成為區域性變數。
在r中,自由變數的值由函式被建立的環境中與其同名的第乙個變數值決定(我理解為最近的同名變數),這種方式被稱為詞彙式範疇(lexical scope)。
而在s中,該值由同名的全域性變數決定。
例如下面的函式cube,在r中cube(2)=8,在s中報錯為sq()找不到n。
cube <- function(n)
乙個銀行賬戶的例子,詳見《r語言筆記》。
10.8 定製環境
詳見《r語言筆記》。
10.9 類別,通用函式和物件定位
乙個物件的類別(class)決定了他會如何被通用函式(generic function)處理。
如果引數本身沒有任何類別屬性,或者其類別在特定問題中並不滿足通用函式的要求,通常會有乙個預設的動作被執行。
類別機制使使用者可以為特定的目的設計和編寫通用函式。
使用》 methods(class="data.frame")可以檢視資料幀的通用函式。
使用》 methods(plot)可以檢視plot函式能處理的類別。
R語言 函式的編寫
r語言實際上是函式的集合,使用者可以使用base,stats等包中的基本函式,也可以自己編寫函式完成一定的功能。但是初學者往往認為編寫r函式十分困難,或者難以理解。這裡對如何編寫r函式進行簡要的介紹。函式是對一些程式語句的封裝。換句話說,編寫函式,可以減少人們對重複 書寫,從而讓r指令碼程式更為簡潔...
R語言中如何編寫自己的函式初步入門
一 迴圈與控制 迴圈 for i in 1 10 print hello world i 10 while i 0 控制 if if else ifelse 判斷,true,false switch type,二 使用者自定義函式 mystats function x,parametric true...
R語言 編寫自定義函式
r語言實際上是函式的集合,使用者可以使用base,stats等包中的基本函式,也可以編寫自定義函式完成一定的功能 乙個函式的結構大致如下所示 myfunction function arglist 其中,myfunction為函式名稱,arglist為函式中的引數列表,大括號 內的語句為函式體,函式...