当前位置:
文档之家› 第三讲 语句组,循环,条件控制
第三讲 语句组,循环,条件控制
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)
练习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 } }
例子:
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") } }
例子:
X<-1:9 #x<-paste(c("X","Y"),1:10,sep="") If (!is.numeric(x) && !plex(x) && !is.logical(x)) { warning("argument is not numeric or logical: returning NA") return(NA_real_) }
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
练习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
例子:将容量为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
Байду номын сангаас
其他循环形式
repeat循环 repeat { expr
#组合表达式
break #达到结束循环的条件,跳处循环 }
while循环 while (condition) { expr }
#while循环中首先执行condition语句, 当condition语句的执行结果为TRUE 时,执行expr,否则结束循环
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 }) }
例子:分析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
二、条件控制语句
if (condition1) statement1 else if (condition2) statement2 else statement3
condition语句返回一逻辑值,为TRUE时执行,为FALSE时跳过
逻辑运算符: && #逻辑与 || #逻辑或 优先对向量的第一个元素进行运算 & #逻辑与 | #逻辑或 ! #逻辑非 按照逐个元素的方式进行计算 == #恒等 > #大于 >= #大于等于 < #小于 <= #小于等于