99999久久久久久亚洲,欧美人与禽猛交狂配,高清日韩av在线影院,一个人在线高清免费观看,啦啦啦在线视频免费观看www

熱線電話:13121318867

登錄
2018-10-17 閱讀量: 1368
使用R自定義函數(shù)的學(xué)習(xí)分享整理

函數(shù)的組成部分

1??函數(shù)體:body(),函數(shù)的代碼

2??形式參數(shù)列表:formals(),控制函數(shù)調(diào)用的參數(shù)列表

3??環(huán)境:environment(),函數(shù)的變量所在位置的“地圖”

> f<-function(x) x^2

> f

function(x) x^2

> formals(f)

$x

> body(f)

x^2

> environment(f)

<environment: R_GlobalEnv>

函數(shù)都有上述三個(gè)組成部分,有一個(gè)例外:原語函數(shù)(如:sum等),它是直接用.Primitive()調(diào)用C語言代碼,并且不包含R語言代碼。因此它們的formals()、body()、environment()都是NULL

四個(gè)基本原則:

名字屏蔽、函數(shù)和變量、全新的開始狀態(tài)、動(dòng)態(tài)查找

(1)名字屏蔽

a)如果一個(gè)名字在函數(shù)中沒有定義,那么R語言將向上一個(gè)層次查找。

? ?b)如果一個(gè)函數(shù)內(nèi)部定義了另一個(gè)函數(shù),也適用同樣的規(guī)則: 首先,查看當(dāng)前函數(shù)的內(nèi)部,然后是這個(gè)函數(shù)被定義的環(huán)境,然后繼續(xù)向上,以此類推,一直到全局環(huán)境,然后,再查找其它已經(jīng)加載的包

? ?c)同樣的規(guī)則也適用于閉包——由其它函數(shù)創(chuàng)建的函數(shù)

a)

> x<-2

> g<-function(){

y<-1

c(x,y)

}

>

> g()

[1] 2 1



b)

> x<-1

> h<-function(){

y<-2

i<-function(){

z<-3

c(x,y,z)

}

i()

}

>

> h()

[1] 1 2 3



c)

> j<-function(x){

y<-2

function(){

c(x,y)

}


(2)函數(shù)和變量

對(duì)于函數(shù),規(guī)則有一點(diǎn)點(diǎn)調(diào)整。 如果很明顯你要的是函數(shù)(例如,f(3)),那么在這樣的語境中,R語言在搜索時(shí),將忽略那些不是函數(shù)的對(duì)象。

> l<-function(x) x + 1

> m<-function(){

l<-function(x) x * 2

l(10)

}

> m()

[1] 20

(3)全新的開始狀態(tài)

?函數(shù)每次調(diào)用時(shí),一個(gè)新的環(huán)境就會(huì)被創(chuàng)建出來,隨后函數(shù)會(huì)在該環(huán)境中執(zhí)行。函數(shù)無法報(bào)告它上一次被調(diào)用時(shí)發(fā)生了什么,因?yàn)槊看握{(diào)用都是完全獨(dú)立的。


> j<-function(){

if(!exists("a")){

a<-1

} else {

a<-a + 1

}

print(a)

}

>

> j()

[1] 1

> j()

[1] 1

(4)動(dòng)態(tài)查找

詞法作用域決定了去哪里查找值,而不是決定在什么時(shí)候查找值。 R語言在函數(shù)運(yùn)行時(shí)查找值,而不是在函數(shù)創(chuàng)建時(shí)查找值。這意味著,函數(shù)的輸出是可以隨著它所處的環(huán)境外面的對(duì)象,而發(fā)生變化的。

79.8666
1
關(guān)注作者
收藏
評(píng)論(0)

發(fā)表評(píng)論

暫無數(shù)據(jù)
推薦帖子