R语言之程序的流程控制

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*price
if(deg>120)
energyPrice=energyPrice*1.15
else if(deg<80)
energyPrice=energyPrice*0.85
else
energyPrice=energyPrice
return(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
                  else
energyprice=energyprice*0.85
return(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=0
for(i in 1:n)
sum=sum+i
return(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+n
n=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)
}




  • 5
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值