第12天 自定义函数的初步学习 R语言中,绝大多数的函数,是软件提供的,或者R包提供的,可以直接调用R后台的算法,帮助我们进行计算。比如我们计算标准差sd时,无需采用公式去计算,而是调用sd()函数即可。但R语言也提供了一种R函数的编写方法,实在没有找到相应方便函数时,可以自行编写函数,方便计算,我们称之为自定义函数或者自编函数。R入门者实际上无需自己去编写函数,这里只介绍入门,便于以后进行深入学习。 · 第11天最后练习题及其答案 练习题: 对于不同的数据,以计算一个新变量, 当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 一、自定义函数案例 # 绘制计算两者和的函数; function1 <- function(x,y){ s<-x+y return(s) } > z<-data.frame(v1=1:5,v2=6:10,v3=11:15) #产生数据框 > z >function1(z$v1,z$v2) #对v1和v2求和 z$s= function1(z$v1,z$v2) # v1和v2求和作为z数据框新的变量 > 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 这段函数什么意思呢? 首先,我编写个程序,用来求两个数据的和,x+y。xy是未知参数,s为两者之和。然后我们对未知参数x、y赋值,根据函数算出和s,最后展示s值,或者数据库增加一列s 二、自定义函数的作用 自定义函数最大的作用,是帮助我们批量操作!无论是数据整理还是计算分析。如果我们重复操作某些方法,要么你复制黏贴代码,改各种名称,要么,采用自编函数的方法简化操作。 三、自定义函数的格式 格式: myfuntion<-function(arg1,arg2,…){ statements return(object) } 函数名称为myfunction; arg1,arg2 为参数,是未知的,是后续需要提供给R语言的。 statements 为函数语句,根据arg1,arg2进行的各种计算 return(object)返回结果。 Statements会产生各种结果,将想要的结果object提取出来给我们 举例 # 编写程序计算 h(x,n)=1+x+x^2+……+x^n. 这里面有两个参数是需要我们提供的x,n,因此函数骨架是function(x,n), x.n <- function(x,n){ #自编函数骨架,x.n为自定义函数名 h <- 0 # 标红的是statements,采用循环的方法进行运算 for(i in 0:n){ h <- h+x^i } return(h) #最后返回的最后一次循环的h值,也就是累和,是函数最后输出值。 } x.n(x=5,n=10) # 如果x=5,n=10,那么根据我们自定义的函数x.n()得到什么结果呢? 值得提醒的是,自编函数存在着一对{},循环语句也存在着一对{},千万不能少掉一个,如果循环语句还有if语句,那么有更多的{}了。 四、练习题 第11天的练习题我们曾希望诸位通过循环和条件语句计算: # 对于数据库z,以计算一个新变量,当v1变量<3时候,这个新变量是原来变量i次方 # 当v1变量为<4时候,这个变量是原变量的i-1次方; # 当v1<5的时候,这个变量是原变量的i-2次方; # 当v1>=5的时候,这个变量是上一个变量值+10; 现在,我们针对的不仅是v1,也可能是v2,v3都需要类似的操作,那么我们需要编写一个函数方便批量操作。 这个新的自变函数更为复杂,它涵盖了自编、循环和条件三种语句,层层嵌套。答案如下: #编写程序: 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) } #根据不同的参数计算值 attach(z) z$v7<-function2(v1) # 根据z数据框的v1求新的变量v7 z 或者z$v7<-function2(z["v1"]) 对于医学数据分析而言,自编函数并不多见,但它作为一种批量操作,在某些场合具有一定的价值,帮助我们快速进行数据整理、转换、和统计分析。如果你看完之后,也不甚理解,可以放弃这一块知识。 DAY12的内容就介绍到这里! |
|