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的内容就介绍到这里!
转自:医学论文与统计分析
- 本文固定链接: https://maimengkong.com/kyjc/974.html
- 转载请注明: : 萌小白 2022年6月4日 于 卖萌控的博客 发表
- 百度已收录