函数
例子:将频率为266,333,400的内存的价格分别增加10%,15%,12%
for (count in 1:length(MemInfo$Price)) { if (MemInfo$Frequency[count]=="266") case<-1 else if(MemInfo$Frequency[count]=="333") case<-2 else case<-3 switch(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 }) }
for (count in 1:length(MemInfo$Price)) { if (MemInfo$Frequency[count]==266) case<-1 else if(MemInfo$Frequency[count]==333) case<-2 else case<-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 }) }
函数
函数的定义格式
function_name<-function(arg_1,arg_2,…) { expression }
函数的调用格式
function_name(arg_1,arg_2,…)
例子:
xor <- function(x, y) { (x | y) & !(x & y) } > x<-c(T,T,F,F) > y<-c(T,F,T,F) > xor(x,y) [1] FALSE TRUE TRUE FALSE
异或:相异返回TRUE,相同返回FALSE.
例子:冒泡法排序
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 第三次扫描后的数据
BubbleSort<-function(Datas,bDesc) #定义冒泡法排序函数bubbleSort() { if (!is.atomic(Datas)) { stop("'Datas' must be atomic'") } i=length(Datas)-1 while (i>0) { nLastExchangeIndex=0 j=0 for (j in 1: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]=TempData nLastExchangeIndex=j } } i=nLastExchangeIndex } Datas }B
调用BubbleSort函数
> x<-rnorm(100,1,1) > y<-BubbleSort(x,TRUE) > plot(x) > plot(y)
练习
在R语言中,可以将函数定义成一个操作符以方便地使用。形式为: %anything%
例子:交换向量中的两个数据
"%<->%"<-function(x,y) { TempData=Datas[x] Datas[x]<<-Datas[y] Datas[y]<<-TempData Datas }
Datas=c(65,97,76,13,27,49,58) 2%<->%4->datas Datas [1] 65 13 76 97 27 49 58
R语言中个操作符号的优先级别
1 :: 显示调用各包的共同函数
2 $ @ 数据列表子集操作符号
3 ^ 求幂操作
4 - + 一元操作符
5 : 序列操作符号
7 * / 二元操作符,算术运算符号
8 + - 算术运输符号
9 > >= < <= == != 逻辑运输符号
10 ! 逻辑运算符号,取反操作
11 & && 逻辑运算符号
12 | || 逻辑运算符号
13 -> ->> 移位操作符
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)
调用:
ans<-BubbleSort(Datas) #按降序处理
函数和变量的作用范围
例子:
f<-function(x){ y<-2*x print(x) #x为参数变量 print(y) #y为局部变量 print(z) #z为自由变量 }
例子:
cube<-function(n){ sq<-function() n*n n*sq() }
调试
例子:调试larger()函数,显示两个自变量及中间变量的值
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 }
> x<-1:4 > y<-4:1 > 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
例子:寻找向量X在某段范围(a,b)内的最大值和对应的下标
max.Info<-function(X,a,b,max.start=-10000){ for (j in a:b) { if (X[j]<=max.start) { max.start=X[j] 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 (X[j]<=min.start) { min.start=X[j] min.count=j } } c(min.start,min.count) }
例子:小鼠下丘听觉诱发电位在麻醉过程中的变化情况
read.table("D:/work/average AEP.csv",header=TRUE,sep=",")->averageAEP 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.max[i]<- result[1] first.max.count[i]<-result[2] result<-max.Info(averageAEP[,i],200,600) #the second maxmum second.max[i]<- result[1] second.max.count[i]<-result[2] result<-min.Info(averageAEP[,i],150,400) #the first minmum first.min[i]<- result[1] first.min.count[i]<-result[2] 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)
作业2:利用sample函数设计算法,把下面16个demo公平地分配给15个组,并提交原程序
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
练习
Base: is.things
Base: recursion
posted on 2016-04-05 09:53 MartinChau 阅读(408) 评论(0) 编辑 收藏 举报