小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

30 天學(xué)會(huì)R DAY 12:自定義函數(shù)的初步學(xué)習(xí)

 妙趣橫生統(tǒng)計(jì)學(xué) 2019-12-08

     第12 自定義函數(shù)的初步學(xué)習(xí)

R語(yǔ)言中,絕大多數(shù)的函數(shù),是軟件提供的,或者R包提供的,可以直接調(diào)用R后臺(tái)的算法,幫助我們進(jìn)行計(jì)算。比如我們計(jì)算標(biāo)準(zhǔn)差sd時(shí),無(wú)需采用公式去計(jì)算,而是調(diào)用sd()函數(shù)即可。但R語(yǔ)言也提供了一種R函數(shù)的編寫方法,實(shí)在沒有找到相應(yīng)方便函數(shù)時(shí),可以自行編寫函數(shù),方便計(jì)算,我們稱之為自定義函數(shù)或者自編函數(shù)。R入門者實(shí)際上無(wú)需自己去編寫函數(shù),這里只介紹入門,便于以后進(jìn)行深入學(xué)習(xí)。

· 11天最后練習(xí)題及其答案

練習(xí)題:

對(duì)于不同的數(shù)據(jù),以計(jì)算一個(gè)新變量,

當(dāng)v1變量<3時(shí)候,這個(gè)新變量是原來(lái)變量i次方;

當(dāng)v1變量為<4時(shí)候,這個(gè)變量是原變量的i-1次方;

當(dāng)v1<5的時(shí)候,這個(gè)變量是原變量的i-2次方;

當(dāng)v1>=5的時(shí)候,這個(gè)變量是上一個(gè)變量值+10;

思考答案:

for(i in 1:length(z$v1)){

 if(z$v1[i]<3){

   z$v7[i]<-z$v1[i]^i

   } else if(z$v1[i]<4){

      z$v7[i]<-z$v1[i]^(i-1)

   } else if(z$v1[i]<5){

     z$v7[i]<-z$v1[i]^(i-2)

   }

    else {

     z$v7[i]<-z$v7[i-1]+10

   }

}

z

、自定義函數(shù)案例

# 繪制計(jì)算兩者的函數(shù);

function1 <- function(x,y){

 s<-x+y

return(s)

}

> z<-data.frame(v1=1:5,v2=6:10,v3=11:15)  #產(chǎn)生數(shù)據(jù)框

> z

>function1(z$v1,z$v2)  #對(duì)v1v2

z$s= function1(z$v1,z$v2)   # v1和v2求和作為z數(shù)據(jù)框新的變量

> z

 v1 v2 v3  s

1  1  6 11  7

2  2  7 12  9

3  3  8 13 11

4  4  9 14 13

5  5 10 15 15

這段函數(shù)什么意思呢?  首先,我編寫個(gè)程序,用來(lái)求兩個(gè)數(shù)據(jù)的和,x+y。xy是未知參數(shù),s為兩者之。然后我們對(duì)未知參數(shù)xy賦值,根據(jù)函數(shù)算出和s,最后展示s值,或者數(shù)據(jù)庫(kù)增加一列s

二、自定義函數(shù)的作用

自定義函數(shù)最大的作用,是幫助我們批量操作!無(wú)論是數(shù)據(jù)整理還是計(jì)算分析。如果我們重復(fù)操作某些方法,要么你復(fù)制貼代碼,改各種名稱,要么,采用自編函數(shù)的方法簡(jiǎn)化操作。

三、自定義函數(shù)的格式

格式:

myfuntion<-function(arg1,arg2,…){

statements

return(object)

}

函數(shù)名稱為myfunction;

arg1arg2 為參數(shù),是未知的,是后續(xù)需要提供給R語(yǔ)言的。

statements 為函數(shù)語(yǔ)句,根據(jù)arg1arg2進(jìn)行的各種計(jì)算

return(object)返回結(jié)果。 Statements會(huì)產(chǎn)生各種結(jié)果,將想要的結(jié)果object提取出來(lái)給我們

舉例

# 編寫程序計(jì)算 h(x,n)=1+x+x^2+……+x^n.

這里面有兩個(gè)參數(shù)是需要我們提供的x,n,因此函數(shù)骨架是functionxn),

x.n <- function(x,n){   #自編函數(shù)骨架,x.n為自定義函數(shù)名

 h <- 0    # 標(biāo)紅的statements,采用循環(huán)的方法進(jìn)行運(yùn)算

 for(i in 0:n){

   h <- h+x^i

 }  

 return(h)  #最后返回的最后一次循環(huán)的h值,也就是累和,是函數(shù)最后輸出值。

}

x.n(x=5,n=10)  #  如果x=5,n=10,那么根據(jù)我們自定義的函數(shù)x.n()得到什么結(jié)果呢?

值得提醒的是,自編函數(shù)存在著一對(duì){},循環(huán)語(yǔ)句也存在著一對(duì){},千萬(wàn)不能少掉一個(gè),如果循環(huán)語(yǔ)句還有if語(yǔ)句,那么有更多的{}了。

四、練習(xí)題

11天的練習(xí)題我們?cè)MT位通過循環(huán)和條件語(yǔ)句計(jì)算:

# 對(duì)于數(shù)據(jù)庫(kù)z,以計(jì)算一個(gè)新變量,當(dāng)v1變量<3時(shí)候,這個(gè)新變量是原來(lái)變量i次方

# 當(dāng)v1變量為<4時(shí)候,這個(gè)變量是原變量的i-1次方;

# 當(dāng)v1<5的時(shí)候,這個(gè)變量是原變量的i-2次方;

# 當(dāng)v1>=5的時(shí)候,這個(gè)變量是上一個(gè)變量值+10

現(xiàn)在,我們針對(duì)的不僅是v1,也可能是v2,v3都需要類似的操作,那么我們需要編寫一個(gè)函數(shù)方便批量操作。

這個(gè)新的自變函數(shù)更為復(fù)雜,它涵蓋了自編、循環(huán)和條件三種語(yǔ)句,層層嵌套。答案如下:

#編寫程序:

function2 <- function(x) {

for(i in 1:length(x)){

 if(x[i]<3){

   y[i]<-x[i]^i

 } else if(x[i]<4){

   y[i]<-x[i]^(i-1)

 } else if(x[i]<5){

   y[i]<-x[i]^(i-2)

 }

 else {

   y[i]<-y[i-1]+10

 }

}

 return(y)

}

#根據(jù)不同的參數(shù)計(jì)算值

attach(z)

z$v7<-function2(v1) # 根據(jù)z數(shù)據(jù)框的v1求新的變量v7

z

或者z$v7<-function2(z["v1"])

對(duì)于醫(yī)學(xué)數(shù)據(jù)分析而言,自編函數(shù)并不多見,但它作為一種批量操作,在某些場(chǎng)合具有一定的價(jià)值,幫助我們快速進(jìn)行數(shù)據(jù)整理、轉(zhuǎn)換、和統(tǒng)計(jì)分析。如果你看完之后,也不甚理解,可以放棄這一塊知識(shí)。

DAY12的內(nèi)容就介紹到這里!

    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多