R语言之程序的流程控制
2017-04-08 15:45
155 查看
1.if 语句
1.1 if语句的基本格式
if(逻辑表达式){系列运算命令}如果if语句所执行的命令只有一行时可以省略大括号eg1:假设1度电费是50元,为了鼓励节约资源,如果一个月使用超过200度,电费将再加收总价的15%,如果电费小于1元,以四舍五入处理。myfunction1<-function(deg,price=50) {energyPrice=deg*price if(deg>200) energyPrice=energyPrice*1.15 return(round(energyPrice)) }> myfunction1(202)[1] 116151.2 if... else 语句
if ...else 语句的基本格式:if (逻辑表达式) {系列运算命令符A}else{ 系列运算命令符B}eg2:延续实例1,但条件改为,如果用电度数在100(含)度以下,则电费享受八五折,100度以上电费增加15%。myfunction2<-function(deg,price=50) { energyPrice=deg*price if(deg<=100) energyPrice=energyPrice*0.85 else energyPrice=energyPrice*1.15 return(round(energyPrice))}> myfunction2(150)[1] 86251.3 if 语句也可以有返回值
R语言和其他高级语言不通,它的if语句类似函数也可以有返回值,可以将该返回值赋予给其他变量。1.4 if ...else if...else if...else
if (逻辑表达式A) { 系列运算命令A}else if(逻辑运算B) { 系列运算B ...}else if(逻辑表达式n) { 系列运算n}else { 系列其他运算命令}eg3:接实例1,条件改为:如果一个月用电超过120度。则电费加收总价的15%,如果一个月用电低于80度,则电费可以减免15%。myfunction3<-function(deg,price=50){energyPrice=deg*priceif(deg>120)energyPrice=energyPrice*1.15else if(deg<80)energyPrice=energyPrice*0.85elseenergyPrice=energyPricereturn(round(energyPrice))}> myfunction3(70) [1] 2975 > myfunction3(100) [1] 5000 > myfunction3(150) [1] 8625
1.5 嵌套式if 语句
嵌套式if语句指的是if语句内可以包含其他的if语句。eg4.假设电费是1度电费50元,为了鼓励节约资源,如果一个月用电低于(含)100度,电费可减免15%,同时如果一个家庭有贫困证明,电费可再减免三成;如果电费超过100度,将加收总价的15%。myfunction4<-function(deg,price=50,poor=FALSE) { energyprice<-deg*price if(deg>100) energyprice=energyprice*1.15 else if(poor==TRUE) energyprice=energyprice*0.85*0.7 elseenergyprice=energyprice*0.85return(round(energyprice))}> myfunction4(80,poor=TRUE)[1] 23802.递归式函数的设计
递归式函数指的是一个函数调用自己,这个函数被称为递归式函数。递归式函数具有如下特点:1)递归式函数每次调用自己时,都会使问题越来越小。2)必须有一个终止条件来终止递归函数的运行。 设计递归式函数时,很容易使程序调入无限循环的过程中,一定要特别小心。eg4:设计阶乘函数。myfunction4<-function(x) {if(x==0) x_sum=1 else x_sum=x*myfunction4(x-1) return(x_sum)}> myfunction4(3)[1] 6
3.向量化的逻辑表达式
处理向量数据时,if ..else会报错。对于向量数据,我们可以使用ifelse()函数,其基本格式如下:ifelse(逻辑判断,TRUE表达式,FALSE表达式)如果逻辑判断为TRUE,则执行TRUE表达式;否则执行FALSE表达式。eg5:ifelse(c(1,5)>3,10,1)[1] 1,104.Switch语句
payattention:switch语句无法处理向量数据。其基本格式如下:switch(判断运算,表达式1,表达式2,...)判断运算的最终值可能是数字或文字,如果最终值是1,则执行表达式1,如果最终值是2,则执行表达式2,以此类推。eg6:依据输入的字符串,作出相应的响应。输入"iphone"则返回"Apple";输入"TV",则返回"Sony";输入"PC",则返回"Dell".myfunction6<-function(type) { switch(type,iphone="Apple", TV="Sony", PC="Dell"}>myfunction6("TV")[1] "Sony"5.for 循环
for循环可以用于向量对象的操作,它的使用格式如下:for(循环索引 in 区间){ 系列运算命令}eg7:计算1到n的总和。myfunction7<-function(n){sum=0for(i in 1:n)sum=sum+ireturn(sum)}> myfunction7(100)[1] 50506.while 循环
while循环的使用格式如下:while(逻辑表达式){ 系列运算命令}如果逻辑表达式为TRUE,循环将持续执行,知道逻辑表达式为FALSE。eg8:使用while循环计算1到n的总和。myfunction8<-function(n){sum=0 while((n>=0){sum=sum+nn=n-1}return(sum)}7.repeat 循环
repeat循环的使用格式如下:repeat{ 单一或系列运算命令 if(逻辑表达式)break 其他运算命令}如果if的逻辑表达式为TRUE,则执行break,跳出repeat循环。eg9:使用repeat循环计算1到n的总和。myfunction9<-function(x){ sum=0 repeat{ sum=sum+x if(x==0) break x=x-1} return(sum)}8.break语句
执行break时,可立即跳出循环9.next 语句
next语句和break语句一样,需要与if语句,也就是逻辑表达式配合使用,但是next语句会跳过目前这次循环的剩下命令,直接进入下一个循环。eg10:计算1到n之间偶数的总和。myfunction10<-function(x){ sum=0 for(i in 1:n){ if(i %%2!=0)next sum=sum+i} print(sum)}相关文章推荐
- Java语言基础(程序流程控制-if、switch、for、while、do while、break、continue)
- 黑马程序员——Java语言基础(二)---程序流程控制语句、函数
- 学习笔记 Java_毕向东_语言基础_程序流程控制 2014.7.29
- Java语言基础——贰(程序流程控制)
- [java学习笔记]java语言基础概述之运算符&程序流程控制&for循环嵌套
- 黑马程序员_java的语言基础组成进阶(对第三课程序流程控制的总结)
- Java语言中的程序流程控制
- Go语言 3 程序的流程控制
- smali语言程序流程控制语法
- Java语言基础组成之:程序流程控制、函数、数组
- 黑马程序员—Java语言基础(程序流程控制-if、switch、for、while、do while、break、continue)
- PLC中ST语言的几种程序流程控制语句
- 黑马程序员——Java语言基础:程序流程控制、函数、数组
- 蜘蛛/爬虫程序的多线程控制(C#语言)
- 蜘蛛/爬虫程序的多线程控制(C#语言)
- JAVA基础学习篇----《thinking in java》第三章:控制程序流程
- 第3章 程序流程控制
- 第3章 程序流程控制
- java编程思想(第四版)_第3章 控制程序流程
- 在程序中有事务控制流程的走向