R自定義函式

2021-10-10 20:48:14 字數 3084 閱讀 4012

說明:#代表注釋,##代表執行結果。

函式最大的優點是**復用,模組化設計。也就是說如果這一段**塊需要在多處使用,就應將其寫成乙個函式,多次呼叫,有效的規避了**的重複。並且在修改時只需要修改函式即可。在定義函式時,個人建議將一小段**封裝成乙個函式,使得**可讀性更高,並且能夠降低程式的複雜性。

函式名

乙個自定義r 函式由三個部分組成:

可以通過body(),formals(),environment()函式分別得到函式的三部分。

函式體是乙個或多個表示式的組合,如果函式體中沒有return()函式返回值,則預設返回最後乙個表示式為返回值。假如你需要返回多個結果,則可以嘗試用list列表的形式返回,之後再進行unlist等操作。

函式在r 語言中與其他普通數值型物件、字元型物件有相同的地位,這也就意味著函式可以擁有屬性。

# 定義乙個求和函式

mysum

function

(x,y)

# 或者

mysum

function

(x,y) x+y # 因為函式只有乙個表示式,大括號可省略

mysum(1:

2,3:

6)## [1] 4 6 6 8

# 如果呼叫函式的形參、實參對應關係儲存在列表中,可以用函式do.call() 來表示函式呼叫

do.call(mysum,list(1:

2,2:

3))## [1] 3 5

#得到函式組成

body(mysum)

##formals(mysum)

## $x

## $y

## [1] 1

environment(mysum)

##

由於r推崇的是向量化的程式設計,所以形參可以為向量。當x,y長度不相等時,會迴圈長度短的向量,進而求和。如果你定義的函式不支援向量化的實參,別擔心,r語言提供了vectorize函式解決這一問題。

g 

function

(x)elsey}

** **(c(-2

,-0.5,0,

0.5,1,

1.5)

)## [1] 1.00 0.25 0.00 0.25 1.00 1.00

下面再簡單定義乙個繪圖函式

myplot 

function()

myplot(

)

即使函式沒有引數,也不能去掉括號引用函式。

windows系統下,rstudio可以手動儲存為pdf,方便調節圖形尺寸,便於圖形美觀。

指定預設值

函式定義時有預設值的形式引數在呼叫時可以省略對應的實參,省略時取預設值。

mysum 

function

(x,y=1)

mysum(1:

2)## [1] 2 3

字首形式:如mysum(1:2)

中綴形式:如5-2,或者是』-』(5,2)。因為它不是合法的r函式名。

替換形式:對屬性進行修改,如通過colnames()函式賦值修改資料框或矩陣等列名。

特殊形式:比如x[1],x[[1]],for,if,(),{}等,這些函式都可稱為初等函式,使用者是無法訪問其三部分的。

x 

2`[`(x,1)

x[1]# 與上一條命令結果相同

## [1] 1

`[10)

# 與x[1]

## [1] 10 2

r遞迴實現斐波那契數列:

# 參考李東風書籍

fib1

function

(n)}

for(i in0:

5) cat(

"i ="

, i,

" x[i] ="

, fib1(i)

,"\n"

)## i = 0 x[i] = 0

## i = 1 x[i] = 1

## i = 2 x[i] = 1

## i = 3 x[i] = 2

## i = 4 x[i] = 3

## i = 5 x[i] = 5

r語言中的變數是指向r物件的引用,在較簡單的函式定義中大體上可以將r 變數看成是對應的儲存空間,這一點與一般的計算機語言是有區別的。

# 定義函式fun1

fun1

function()

fun1(

)## [1] 123

print(x)

## error in print(x) : 找不到物件'x'

那麼如果r工作空間中已經存在同名的變數,會不會有影響?

fun1 

function()

fun1(

)## [1] 123

x 2,3)

print(x)

## [1] 1 2 3

從上述小例子中可以發現,在函式中定義x時會變成區域性變數,這種規則在r中稱為掩藏。也就是函式本身是另乙個工作空間。

那麼想在函式中修改r全域性環境中的變數怎麼辦??

x 

2,3)

fun1

function()

fun1(

)## [1] 123

print(x)

## [1] 123

<

[1] 《r 語言教程》李東風著

R語言 編寫自定義函式

r語言實際上是函式的集合,使用者可以使用base,stats等包中的基本函式,也可以編寫自定義函式完成一定的功能 乙個函式的結構大致如下所示 myfunction function arglist 其中,myfunction為函式名稱,arglist為函式中的引數列表,大括號 內的語句為函式體,函式...

R語言 自定義排序

我有乙個類似於以下內容的分類資料集 a data.frame animal c cat cat cat dog dog dog elephant elephant elephant color c rep c blue red green 3 我想訂購它,以便動物用狗,然後大象,然後貓,然後顏色分為...

自定義函式 Excel之自定義函式

在excel中,當系統函式不能滿足我們的需求時候,我們可以使用vba自定義函式,如抓取網頁資料,翻譯詞彙,手機號歸屬地查詢等。下面將介紹2個自定義函式,idymd函式 身份證年月日性別 通過身份證號,返回性別,出生年月日。語法 idymd id 引數 id,身份證號,預設身份證長度18位。vba 如...