函数

例子:将频率为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 阅读(422) 评论(0) 收藏 举报
浙公网安备 33010602011771号