您的位置:首页 > 其它

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] 11615

1.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] 8625

1.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] 2380

2.递归式函数的设计

递归式函数指的是一个函数调用自己,这个函数被称为递归式函数。递归式函数具有如下特点: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,10

4.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] 5050

6.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)}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: