




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第五讲语言函数第1页,共30页,2023年,2月20日,星期一第2页,共30页,2023年,2月20日,星期一for(countin1:length(MemInfo$Price)){if(MemInfo$Frequency[count]=="266")case<-1elseif(MemInfo$Frequency[count]=="333")case<-2elsecase<-3switch(case,{MemInfo$Price[count]<-MemInfo$Price[count]*1.1},{MemInfo$Price[count]<-MemInfo$Price[count]*1.15},{MemInfo$Price[count]<-MemInfo$Price[count]*1.12})}例子:将频率为266,333,400的内存的价格分别增加10%,15%,12%第3页,共30页,2023年,2月20日,星期一for(countin1:length(MemInfo$Price)){if(MemInfo$Frequency[count]==266)case<-1
elseif(MemInfo$Frequency[count]==333)case<-2elsecase<-4
switch(case,"1"={MemInfo$Price[count]<-MemInfo$Price[count]*1.1},"2"={MemInfo$Price[count]<-MemInfo$Price[count]*1.15},"4"={MemInfo$Price[count]<-MemInfo$Price[count]*1.12})}第4页,共30页,2023年,2月20日,星期一函数作为一种对象模式,函数和操作符在R语言内部以一种特殊的方式保存,这些函数和操作符可以在R语言中被调用在使用R语言的过程中我们可以调用R语言各种包中携带的函数,也可以根据实际需要定义自己的函数第5页,共30页,2023年,2月20日,星期一函数的定义和调用格式函数的定义格式function_name<-function(arg_1,arg_2,…){expression}函数的调用格式
function_name(arg_1,arg_2,…)第6页,共30页,2023年,2月20日,星期一例子xor<-function(x,y){(x|y)&!(x&y)}第7页,共30页,2023年,2月20日,星期一>x<-c(T,T,F,F)>y<-c(T,F,T,F)>xor(x,y)[1]FALSETRUETRUEFALSE异或:相异返回TRUE,相同返回FALSE.第8页,共30页,2023年,2月20日,星期一例子:冒泡法排序冒泡法排序算法:从第i个元素开始两两进行比较,并将较大的数值往后推移65,97,76,13,27,49,581:[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第三次扫描后的数据第9页,共30页,2023年,2月20日,星期一BubbleSort<-function(Datas,bDesc)#定义冒泡法排序函数bubbleSort(){
if(!is.atomic(Datas)){
stop("'Datas'mustbeatomic'")}i=length(Datas)-1
while(i>0){nLastExchangeIndex=0j=0
for(jin1:i){
if((bDesc&&Datas[j]>Datas[j+1])||(!bDesc&&Datas[j]<Datas[j+1])){TempData=Datas[j]Datas[j]=Datas[j+1]Datas[j+1]=TempDatanLastExchangeIndex=j}}i=nLastExchangeIndex}Datas}B第10页,共30页,2023年,2月20日,星期一>x<-rnorm(100,1,1)>y<-BubbleSort(x,TRUE)>plot(x)>plot(y)调用BubbleSort函数第11页,共30页,2023年,2月20日,星期一练习5.1编写一个函数,给出两个数之后,直接给出这两个数的平方和。第12页,共30页,2023年,2月20日,星期一定义二元操作符在R语言中,可以将函数定义成一个操作符以方便地使用。形式为:
%anything%%%
余数%*%
矩阵内积%/%
整除%in%
交集%o%
数组外积%x%KroneckerProductsonArrays第13页,共30页,2023年,2月20日,星期一"%<->%"<-function(x,y){TempData=Datas[x]Datas[x]<<-Datas[y]Datas[y]<<-TempDataDatas}例子:交换向量中的两个数据Datas=c(65,97,76,13,27,49,58)2%<->%4->datasDatas[1]65137697274958第14页,共30页,2023年,2月20日,星期一R语言中个操作符号的优先级别1::显示调用各包的共同函数2$@数据列表子集操作符号3^求幂操作4-+一元操作符5:序列操作符号%xyz%各种定义操作符号,包括R语言系统固有的定义符号
%x%,%%,%/%,%*%,%o%,%in%等7*/二元操作符,算术运算符号8+-算术运输符号9>>=<<===!=逻辑运输符号10!逻辑运算符号,取反操作11&&&逻辑运算符号12|||逻辑运算符号13->->>移位操作符14=赋值操作符15<-<<-移位操作符第15页,共30页,2023年,2月20日,星期一参数名和参数缺省定义调用函数时,可以按照参数表的定义顺次给参数逐一地设值,也可以通过参数名直接应用。采用参数名调用函数时,参数名应用的顺序可以同函数参数定义的顺序无关。在定义函数时可以设定一些缺省值的参数,当调用函数时,如果不设定某个参数,则这个参数将按缺省值进行处理。第16页,共30页,2023年,2月20日,星期一函数: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)第17页,共30页,2023年,2月20日,星期一冒泡排序法:BubbleSort<-function(Datas,bDesc=TRUE)调用:啊ns<-BubbleSort(Datas)#按降序处理第18页,共30页,2023年,2月20日,星期一函数和变量的作用范围函数中使用的变量可以分为三种类型:参数变量、局部变量、自由变量。参数变量即函数的参数,调用函数时将参数的数值传递给参数变量。局部变量是指函数内部声明的变量,退出函数时这些局部变量将被清除。参数变量和局部变量以外的变量都为自由变量。在R语言中自由变量逐级往上寻找相同名字的变量来赋值;如果没找到则产生新的自由变量。第19页,共30页,2023年,2月20日,星期一
f<-function(x){y<-2*x
print(x)#x为参数变量
print(y)#y为局部变量
print(z)#z为自由变量}例子:第20页,共30页,2023年,2月20日,星期一cube<-function(n){sq<-function()n*nn*sq()}例子:第21页,共30页,2023年,2月20日,星期一调试R语言不具有单步跟踪、设置断点、观察表达式等调试功能可以用print(),cat()函数实时显示需要调试的信息可以用browser()函数暂停程序,并进入单步执行状态第22页,共30页,2023年,2月20日,星期一larger<-function(x,y){
cat("x=",x,"\n")
cat("y=",y,"\n")y.is.bigger<-(y>x)
cat("y.is.bigger=",y.is.bigger,"\n")x[y.is.bigger]<-y[y.is.bigger]x}例子:调试larger()函数,显示两个自变量及中间变量的值第23页,共30页,2023年,2月20日,星期一>x<-1:4>y<-4:1>larger(x,y)x=1234y=4321y.is.bigger=TRUETRUEFALSEFALSE[1]4334第24页,共30页,2023年,2月20日,星期一max.Info<-function(X,a,b,max.start=-10000){
for(jina:b){
if(X[j]<=max.start){max.start=X[j]max.count=j}}
c(max.start,max.count)}例子:寻找向量X在某段范围(a,b)内的最大值和对应的下标第25页,共30页,2023年,2月20日,星期一min.Info<-function(X,a,b,min.start=10000){
for(jina:b){
if(X[j]<=min.start){min.start=X[j]min.count=j}}
c(min.start,min.count)}例子:寻找向量X在某段范围(a,b)内的最小值和对应的下标第26页,共30页,2023年,2月20日,星期一例子:小鼠下丘听觉诱发电位在麻醉过程中的变化情况要求:提取每个记录时段对应AEP波形的N0、P1、N1波对应的极值和时间117第27页,共30页,2023年,2月20日,星期一read.table("D:/work/averageAEP.csv",header=TRUE,sep=",")->averageAEPfirst.max<--10000,first.max.count<-0,second.max<--10000,second.max.count<-0,first.min<-0,first.min.count<-0for(iin1:17)
{result<-max.Info(averageAEP[,i],60,180)#thefirstmaxmumfirst.max[i]<-result[1]first.max.count[i]<-result[2]result<-max.Info(averageAEP[,i],200,600)#thesecondmaxmumsecond.max[i]<-result[1]second.max.count[i]<-result[2]result<-min.Info(averageAEP[,i],150,400)#thefirstminmumfirst.min[i]<-result[1]first.min.count[i]<-result[2]
browser()
#跟踪信息
}latency.P1<-first.min.count/12.2#p1latencylatency.P1.N0<-(first.min.count-first.max.count)/12.2#n0-P1latencylatency.N1
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 企业股权分配合同样本
- 信托合同与合同标准文本
- 儿童影楼转让合同样本
- 2025公寓物业管理服务合同模板
- 内墙腻子劳务合同样本
- 凤爪贸易合同标准文本
- 出售个人铣床合同标准文本
- 3人投资合同样本
- 创新思维与项目推进计划
- 养殖用地出租合同样本
- 新《斜视弱视学》期末考试复习题库(含答案)
- 2015年919公务员联考《申论》政法干警河北卷及参考答案
- 建筑施工企业全面预算管理方案
- 深海采矿技术及环境影响
- 【天润乳业公司薪酬管理存在的问题及优化建议分析(含问卷)9900字(论文)】
- GB/T 23236-2024数字航空摄影测量空中三角测量规范
- 早期预警评分量表(MEWS评分表)
- 彩虹人生利丰校园快递创业计划书
- 血液净化项目商业计划书
- 天津市2024年物理八年级下册期末学业质量监测试题含解析
- JJG 693-2004可燃气体检测报警器
评论
0/150
提交评论