日韩黑丝制服一区视频播放|日韩欧美人妻丝袜视频在线观看|九九影院一级蜜桃|亚洲中文在线导航|青草草视频在线观看|婷婷五月色伊人网站|日本一区二区在线|国产AV一二三四区毛片|正在播放久草视频|亚洲色图精品一区

分享

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

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

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

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

· 11天最后練習題及其答案

練習題:

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

v1變量<3時候,這個新變量是原來變量i次方;

v1變量為<4時候,這個變量是原變量的i-1次方;

v1<5的時候,這個變量是原變量的i-2次方;

v1>=5的時候,這個變量是上一個變量值+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ù)案例

# 繪制計算兩者的函數(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)  #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ù)什么意思呢?  首先,我編寫個程序,用來求兩個數(shù)據(jù)的和,x+y。xy是未知參數(shù),s為兩者之。然后我們對未知參數(shù)xy賦值,根據(jù)函數(shù)算出和s,最后展示s值,或者數(shù)據(jù)庫增加一列s

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

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

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

格式:

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

statements

return(object)

}

函數(shù)名稱為myfunction;

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

statements 為函數(shù)語句,根據(jù)arg1,arg2進行的各種計算

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

舉例

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

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

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

 h <- 0    # 標紅的statements,采用循環(huán)的方法進行運算

 for(i in 0:n){

   h <- h+x^i

 }  

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

}

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

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

四、練習題

11天的練習題我們曾希望諸位通過循環(huán)和條件語句計算:

# 對于數(shù)據(jù)庫z,以計算一個新變量,當v1變量<3時候,這個新變量是原來變量i次方

# v1變量為<4時候,這個變量是原變量的i-1次方;

# v1<5的時候,這個變量是原變量的i-2次方;

# v1>=5的時候,這個變量是上一個變量值+10

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

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

#編寫程序:

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ù)計算值

attach(z)

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

z

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

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

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

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

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多