资源描述
单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,第五讲 函数,for(count in 1:length(MemInfo$Price),if(MemInfo$Frequencycount=266),case-1,else if(MemInfo$Frequencycount=333),case-2,else,case-3,switch(case,MemInfo$Pricecount-MemInfo$Pricecount*1.1,MemInfo$Pricecount-MemInfo$Pricecount*1.15,MemInfo$Pricecount-MemInfo$Pricecount*1.12,),例子,:,将频率为,266,333,400,的内存的价格分别增加,10%,15%,12%,for(count in 1:length(MemInfo$Price),if(MemInfo$Frequencycount=266),case-1,else if(MemInfo$Frequencycount=333),case-2,else,case-4,switch(case,1=,MemInfo$Pricecount-MemInfo$Pricecount*1.1,2=,MemInfo$Pricecount-MemInfo$Pricecount*1.15,4=,MemInfo$Pricecount-MemInfo$Pricecount*1.12,),函数,作为一种对象模式,函数和操作符在,R,语言内部以一种特殊的方式保存,这些函数和操作符可以在,R,语言中被调用,在使用,R,语言的过程中我们可以调用,R,语言各种包中携带的函数,也可以根据实际需要定义自己的函数,函数的定义和调用格式,函数的定义格式,function_name-function(arg_1,arg_2,),expression,函数的调用格式,function_name(arg_1,arg_2,),例子,:,冒泡法排序,冒泡法排序算法,:,从第,i,个元素开始两两进行比较,并将较大的数值往后推移,65,,,97,,,76,,,13,,,27,,,49,,,58,1,:,65,,,76,,,13,,,27,,,49,,,58,,,97,第一次扫描后的数据,2,:,65,,,13,,,27,,,49,,,58,,,76,,,97,第二次扫描后的数据,3,:,13,,,27,,,49,,,58,,,65,,,76,,,97,第三次扫描后的数据,4,:,13,,,27,,,49,,,58,,,65,,,76,,,97,第三次扫描后的数据,BubbleSort0),nLastExchangeIndex=0,j=0,for,(j,in,1:i),if,(bDesc&DatasjDatasj+1)|(!bDesc&Datasj x y plot(x),plot(y),调用,BubbleSort,函数,练习,5.1,编写一个函数,给出两个数之后,直接给出这两个数的平方和。,定义二元操作符,在,R,语言中,可以将函数定义成一个操作符以方便地使用。形式为:,%anything%,%,余数,%*%,矩阵内积,%/%,整除,%in%,交集,%o%,数组外积,%x%,Kronecker Products on Arrays,%-,function,(x,y),TempData=Datasx,Datasx-Datasy,Datasydatas,Datas,1 65,13,76,97,27 49 58,R,语言中个操作符号的优先级别,1 :,显示调用各包的共同函数,2$,数据列表子集操作符号,3 ,求幂操作,4 -+,一元操作符,5 :,序列操作符号,%xyz%,各种定义操作符号,包括,R,语言系统固有的定义符号,%x%,%,%/%,%*%,%o%,%in%,等,7 */,二元操作符,算术运算符号,8 +-,算术运输符号,9 =-,移位操作符,14 =,赋值操作符,15 -,移位操作符,参数名和参数缺省定义,调用函数时,可以按照参数表的定义顺次给参数逐一地设值,也可以通过参数名直接应用。,采用参数名调用函数时,参数名应用的顺序可以同函数参数定义的顺序无关。,在定义函数时可以设定一些缺省值的参数,当调用函数时,如果不设定某个参数,则这个参数将按缺省值进行处理。,函数:,fun1-,function,(data,data.frame,graph,limmit),expression,调用函数的形式:,ans-,fun1,(d,df,TRUE,20),ans-,fun1,(d,df,graph=TRUE,limit=20),ans-,fun1,(data=d,limit=20,graph=TRUE,data.frame=df),冒泡排序法:,BubbleSort-,function,(Datas,bDesc=TRUE),调用:,啊,ns-,BubbleSort,(Datas)#,按降序处理,函数和变量的作用范围,函数中使用的变量可以分为三种类型:参数变量、局部变量、自由变量。,参数变量即函数的参数,调用函数时将参数的数值传递给参数变量。,局部变量是指函数内部声明的变量,退出函数时这些局部变量将被清除。,参数变量和局部变量以外的变量都为自由变量。在,R,语言中自由变量逐级往上寻找相同名字的变量来赋值;如果没找到则产生新的自由变量。,f-,function,(x),y-2*x,print,(x),x,为参数变量,print,(y),y,为局部变量,print,(z),z,为自由变量,例子:,cube-,function,(n),sq-,function,()n*n,n*sq(),例子:,调试,R,语言不具有单步跟踪、设置断点、观察表达式等调试功能,可以用,print(),cat(),函数实时显示需要调试的信息,可以用,browser(),函数暂停程序,并进入单步执行状态,larger-,function,(x,y),cat,(x=,x,n),cat,(y=,y,n),y.is.biggerx),cat,(y.is.bigger=,y.is.bigger,n),xy.is.bigger x y larger(x,y),x=1 2 3 4,y=4 3 2 1,y.is.bigger=TRUE TRUE FALSE FALSE,1 4 3 3 4,max.Info-,function,(X,a,b,max.start=-10000),for,(j,in,a:b),if,(Xj=max.start),max.start=Xj,max.count=j,c,(max.start,max.count),例子:寻找向量,X,在某段范围,(a,b),内的最大值和对应的下标,min.Info-,function,(X,a,b,min.start=10000),for,(j,in,a:b),if,(XjaverageAEP,first.max-10000,,,first.max.count-0,,,second.max-10000,,,second.max.count-0,,,first.min-0,,,first.min.count-0,for,(i,in,1:17),result-max.Info(averageAEP,i,60,180),#the first maxmum,first.maxi-result1,first.max.counti-result2,result-max.Info(averageAEP,i,200,600),#the second maxmum,second.maxi-result1,second.max.counti-result2,result-min.Info(averageAEP,i,150,400),#the first minmum,first.mini-result1,first.min.counti-result2,browser,(),#,跟踪信息,latency.P1-first.min.count/12.2#p1 latency,latency.P1.N0-(first.min.count-first.max.count)/12.2#n0-P1 latency,latency.N1.P1-(second.max.count-first.min.count)/12.2#p1-N1 latency,amplitude.N1.P1-(second.max-first.min)/10#p1-n1 amplitude,AEP.character-,data.frame,(RecordingTime=1:17,latency.P1,latency.P1.N0,latency.N1.P1,amplitude.N1.P1),Base:is.things,Base:recursion,Graphics:Hershey,Graphics:Japanese,Graphics:graphics,Graphics:image,Graphics:persp,Graphics:plotmath,Lattice:intervals,Lattice:labels,Lattice:lattice,Lattice:panel,Stats:glm.vr,Stats:lm.glm,Stats:nlm,Stats:smooth,作业,2,:利用,sample,函数设计算法,把下面,16,个,demo,公平地分配给,15,个组,并提交原程序,练习,5.3,查看,demo:,Base:is.things,Base:recursion,
展开阅读全文