第三讲 语句组,循环,条件控制

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

例子:定义一个长度为100、mean=1,sd=1 的正态分布随机向量,并找出该向量的最小值 及其出现的位置
norm<-rnorm(100,1,1) #随机向量 min.norm<-100 #设定初始最大值 for (i in 1:100) { if (norm[i]<=min.norm) #第i个值与现有最大值做比较, { 如果比最大值大则更新最大值, 并记录位置,否则不做处理 min.norm=norm[i] min.count=i } }
练习4.1
• 自行设计一个条件控制例子,条件中包含 逻辑运算符号&&,||和!
三、循环
• for循环 • >for (name in statement) {expr} #其中name为循环;statement一般为一向量;expr 一般为组合表达式
例子
> for (n in c(2,5,10,20,50)) + { + x<-rnorm(n) + cat(n,":",sum(x^2),"\n") + } 2 : 0.4124139 5 : 5.202875 10 : 13.96513 20 : 20.07696 50 : 58.16209
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 }) }
例子:
x<-8 if (x>=10) { x<-x+10 cat("x>=",x,"\n") } else if (x>=7) { x<-x+7 cat("x>=",x,"\n") } else { x<-x+5 cat("x>=",x,"\n") }
x<-8 If (0) { #condition不为0,执行 if (x>=10) { x<-x+10 cat("x>=",x,"\n") } else if (x>=7) { x<-x+7 cat("x>=",x,"\n") } else { x<-x+5 cat("x>=",x,"\n") } }
outer(X,Y,FUN=“*”):提取两个矩阵的属性
outer(X,Y,FUN=“*”):两个矩阵的外积计算过程
定义一个数据框
> Vender<-paste(c("Vender"),1:9,sep="") > ProduceName<-c("256MB DDR 400","256MB DDR 333","512MB DDR 400", + "256MB DDR 400","256MB DDR 333","256MB SDRAM 266", + "256MB DDR 400","256MB DDR 400","512MB DDR 400") > Type<-rep(c("DDR"),9) > Type[6]<-"SDRAM" > Mem<-c(256,256,512,256,256,256,256,256,512) > Frequency<-c(400,333,400,400,333,266,400,400,400) > Price<-c(315,300,650,280,265,265,290,345,575) > MemInfo<-data.frame(Vender,ProduceName,Type,Mem,Frequency,Price) > MemInfo Vender ProduceName Type Mem Frequency Price 1 Vender1 256MB DDR 400 DDR 256 400 315 2 Vender2 256MB DDR 333 DDR 256 333 300 3 Vender3 512MB DDR 400 DDR 512 400 650 4 Vender4 256MB DDR 400 DDR 256 400 280 5 Vender5 256MB DDR 333 DDR 256 333 265 6 Vender6 256MB SDRAM 266 SDRAM 256 266 265 7 Vender7 256MB DDR 400 DDR 256 400 290 8 Vender8 256MB DDR 400 DDR 256 400 345 9 Vender9 512MB DDR 400 DDR 512 400 575
for (j in 1:100) { min.n<-0 norm<-rnorm(100,1,1) min.norm[j]<-100 for (i in 1:100) { if (norm[i]<=min.norm[j]) { min.norm[j]=norm[i] min.count[j]=i } } } plot(min.count,min.norm)
二、条件控制语句
if (condition1) statement1 else if (condition2) statement2 else statement3
condition语句返回一逻辑值,为TRUE时执行,为FALSE时跳过
逻辑运算符: && #逻辑与 || #逻辑或 优先对向量的第一个元素进行运算 & #逻辑与 | #逻辑或 ! #逻辑非 按照逐个元素的方式进行计算 == #恒等 > #大于 >= #大于等于 < #小于 <= #小于等于
Ifelse (condiction,a,b) #这个表达式返回一个向量,其长度为a,b中的最 大长度.当condition[i]为真时返回a[i],否则返回b[i]. 例子:根据内存的基本数据,我们定义价格大 于300的内存的价格为expensive,否则为cheap
> rep("expensive",length(MemInfo$Price))->ExpStr > rep("cheap",length(MemInfo$Price))->CheapStr > ifelse(MemInfo$Price>300,ExpStr,CheapStr)->PriceDescription > PriceDescription [1] "expensive" "cheap" "expensive" "cheap" "cheap“ "cheap" [7] "cheap" "expensive" "expensive"
例子:
X<-1:9 #x<-paste(c("X","Y"),1:10,sep="") If (!is.numeric(x) && !is.complex(x) && !is.logical(x)) { warning("argument is not numeric or logical: returning NA") return(NA_real_) }
第三讲:语句组,循环,条件控制
事件处理的逻辑模式
• • • • 顺序执行 按条件作出是否执行的判断 根据某种条件变化反复执行 根据不同的情况作出相应的执行
一、组合表达式
• 为实现某一功能而使各种命令表达式组合 在一起形成一个复合表达式,形式一般为: • { expr_1 expr_2 … expr_n }
例子:分析outer函数的计算过程 两个数组的外积
> X<-matrix(1:4,nrow=2) > Y<-array(1:6,dim=c(3,2)) >X [,1] [,2] [1,] 1 3 [2,] 2 4 >Y [,1] [,2] [1,] 1 4 [2,] 2 5 [3,] 3 6
> outer(Y,X) #Y%o%X , , 1, 2 , , 1, 1 [,1] [,2] [1,] 1 4 [2,] 2 5 [3,] 3 6 , , 2, 1 [,1] [,2] [1,] 3 12 [2,] 6 15 [3,] 9 18 , , 2, 2 [,1] [,2] [1,] 4 16 [2,] 8 20 [3,] 12 24
四、分支控制语句
• switch(statement,list) • #switch语句根据判定条件的不同而执行不 同的分支语句。首先执行statement,其返回 值范围为1到list的长度。Switch语句执行list 中包含的语句,并将结果返回。
例子:将频率为266,333,400的内存的价格分别 增加10%,15%,12%
例子:将容量为256M的内存的价格普调增长10%
> > + + + + + + + > count<-1 repeat { if(MemInfo$Mem[count]=="256") MemInfo$Price[count]<-MemInfo$Price[count]*1.1 count=count+1 if (count>length(MemInfo$Price)) break } MemInfo Vender ProduceName Type Mem Frequency Price 1 Vender1 256MB DDR 400 DDR 256 400 346.5 2 Vender2 256MB DDR 333 DDR 256 333 330.0 3 Vender3 512MB DDR 400 DDR 512 400 650.0 4 Vender4 256MB DDR 400 DDR 256 400 308.0 5 Vender5 256MB DDR 333 DDR 256 333 291.5 6 Vender6 256MB SDRAM 266 SDRAM 256 266 291.5 7 Vender7 256MB DDR 400 DDR 256 400 319.0 8 Vender8 256MB DDR 400 DDR 256 400 379.5 9 Vender9 512MB DDR 400 DDR 512 400 575.0
练习4.2
• 找出以上向量的最大值及其出现的位置。
• 找处100次产生的随机向量的最小值于出现位 置的关系。(用plot(min.count,min.norm)表示, 其中min.count为位置向量,min.norm为最小 值向量)
norm<-rnorm(100,1,1) max.norm<--100 for (i in 1:100) { if (norm[i]>=max.norm) { max.norm=norm[i] max.count=i } }
其他循环形式
repeat循环 repeat { expr
#组合表达式
break #达到结束循环的条件,跳处循环 }
while循环 while (condition) { expr }
#while循环中首先执行condition语句, 当condition语句的执行结果为TRUE 时,执行expr,否则结束循环
[,1] [,2] [1,] 2 8 [2,] 4 10 [3,] 6 12
可以改变计算函数FUN:+,-,*,/Leabharlann Baidu^
> outer(Y,X,FUN="+") , , 1, 1 >X [,1] [,2] [1,] 1 3 [2,] 2 4 >Y [,1] [,2] [1,] 1 4 [2,] 2 5 [3,] 3 6 [,1] [,2] [1,] 2 5 [2,] 3 6 [3,] 4 7 , , 2, 1 [,1] [,2] [1,] 3 6 [2,] 4 7 [3,] 5 8 , , 1, 2 [,1] [,2] [1,] 4 7 [2,] 5 8 [3,] 6 9 , , 2, 2 [,1] [,2] [1,] 5 8 [2,] 6 9 [3,] 7 10
相关文档
最新文档