购买
下载掌阅APP,畅读海量书库
立即打开
畅读海量书库
扫码下载掌阅APP

5.2 选择语句

在生活中,我们总是要做出许多选择,程序也是一样。下面给出几个常见的例子。

如果购买成功,则用户余额减少,用户积分增多。

如果输入的用户名和密码正确,则提示登录成功,进入网站;否则,提示登录失败。

如果用户使用微信登录,则使用微信扫一扫;如果使用QQ登录,则输入QQ号和密码;如果使用微博登录,则输入微博账号和密码;如果使用手机号登录,则输入手机号和密码。

以上例子中的判断就是程序中的选择语句,也称为条件语句,即按照条件选择执行不同的代码片段。在R语言中选择语句主要有5种形式,分别为if语句、if…else语句、if…elseif…else语句、多分支swich语句和向量化的ifelse语句,下面将分别对它们进行详细讲解。

5.2.1 if语句

在R语言中,最简单的选择语句是使用if保留字组成的选择语句,语法格式如下:

     if(表达式)
     {
         语句块
     }

其中,括号中的表达式可以是一个单纯的布尔值或变量,也可以是比较表达式或逻辑表达式(如a > b and a != c),如果表达式的值为真(TRUE),则执行语句块;如果表达式的值为假(FALSE),则跳过语句块继续执行后面的语句。if语句相当于汉语里的“如果……就……”,其流程图如图5.1所示。

图5.1 简单if语句的执行流程

下面解决黄蓉题目中的第一个要素:判断一个数,除以三余二,除以五余三,除以七剩二。

【例5.1】 判断输入的是不是黄蓉所说的数 (实例位置:资源包\Code\05\01)

使用if语句判断用户输入的数字是不是黄蓉所说的“除以三余二,除以五余三,除以七剩二”的数。运行RStudio,编写如下代码。

     1  # 为number赋值
     2  number <- 23
     3  # 判断是否符合条件
     4  if (number%%3 ==2 && number%%5==3 && number%%7==2)
     5      print(paste(number,"符合条件:三三数之剩二,五五数之剩三,七七数之剩二"))

代码解析

第4行代码:%%符号返回除法的余数。

第5行代码:paste()函数用于连接字符串。

运行程序,当为number赋值23时,结果如图5.2所示;当number的值是不符合条件的数字时,什么也不输出。

图5.2 输入的是符合条件的数

下面介绍if语句使用的注意事项。

(1)如果只有一条语句,则可以省略花括号“{}”。

(2)如果只有一条语句,且语句较短,语句块可以直接写在表达式的右侧,示例代码如下:

     if (a > b) max = a

但是,为了程序代码的可读性,建议不要这么做。

(3)如果语句块中包含多条语句,需要使用花括号“{}”,示例代码如下:

     1  if (a > b)
     2  {
     3      max = a
     4      print(max)
     5      print(a)
     6      print(b)
     7  }

5.2.2 if…else语句

如果遇到只能二选一的条件,如某大学生需在两个专业之间做出选择(见图5.3),则可以使用if…else语句,语法格式如下:

     if (表达式){
          语句块1
     } else {
          语句块2
     }

其中,表达式可以是一个单纯的布尔值或变量,也可以是比较表达式或逻辑表达式。如果if后的条件满足,则执行if后的语句块1,否则执行else后的语句块2。

if…else语句相当于汉语里的“如果……否则……”,其流程图如图5.4所示。

图5.3 选择专业

图5.4 if…else语句流程图

下面改进例5.1,实现“如果输入的数不符合条件,则给出提示”的功能。

【例5.2】 判断输入的是不是黄蓉所说的数(改进版) (实例位置:资源包\Code\05\02)

使用if…else语句判断用户输入的数字是不是黄蓉所说的“除以三余二,除以五余三,除以七剩二”的数,并给予相应的提示。运行RStudio,编写如下代码。

运行程序,number赋值为17,执行else之后的语句,即“17不符合条件”。

注意

else语句不能单独成行,其前边必须有内容。如果没有内容,那么也需要有一个花括号,否则将提示错误。else单独成行时,需要将if...else语句整体放在一个花括号里,示例代码如下:

5.2.3 if…else if…else语句

在日常购物时,通常有多种付款方式可供选择—现金、微信、支付宝、银行卡等,如图5.5所示。这4种付款方式,用户可以随机选择一种。

图5.5 购物时的付款方式

在程序开发中,如果遇到多选一的情况,则可以使用if…else if…else语句。该语句是一个多分支选择语句,通常表示“如果满足某种条件,则进行某种处理;否则,如果满足另一种条件,则执行另一种处理……”。if…else if…else语句的语法格式如下:

     if (表达式1)
         语句块1
     else if (表达式2)
         语句块2
     else if (表达式3)
         语句块3
     …
     else
         语句块n

在使用if…else if…else语句时,表达式可以是一个单纯的布尔值或变量,也可以是比较表达式或逻辑表达式,如果表达式为真,则执行语句;如果表达式为假,则跳过该语句,进行下一个else if判断。只有在所有表达式都为假的情况下,才会执行else中的语句。if…else if…else语句的流程如图5.6所示。

图5.6 if…else if…else语句的流程图

【例5.3】 根据分数给出不同提示 (实例位置:资源包\Code\05\03)

下面根据学生的分数将成绩划分为“优”“良”“及格”“不及格”4个不同等级。运行RStudio,编写如下代码。

运行程序,myval赋值为54,结果为“不及格”;myval赋值为88,结果为“良好”;myval赋值为95,结果为“优秀”;myval赋值为120,结果为“成绩无效”。

5.2.4 多分支swich语句

当选择情况较多时,使用if语句很麻烦,而且不直观。对此R语言提供了swich语句,使用该语句可以方便、直观地处理多分支的控制结构,语法格式如下:

     switch(表达式, case1, case2, case3…)

表达式的计算结果为整数,其值在1~length(case语句数量)时,swich语句返回相应位置的值。如果表达式的值超出范围,则没有返回值。

swich语句的流程如图5.7所示。

图5.7 swich语句的流程图

【例5.4】 根据给定的数字判断是星期几 (实例位置:资源包\Code\05\04)

通过给定的数字判断是星期几,运行RStudio,编写如下代码。

运行程序,myval赋值为7时,结果为“星期日”;myval赋值为2时,结果为“星期二”;myval赋值为88时,结果为NULL。

5.2.5 向量化的ifelse语句

除了if、if…else语句,R语言还提供了一个向量化的ifelse语句。该语句能够根据用户指定的条件进行各种操作,在数据处理中非常有用。

ifelse语句主要用于判断某个变量是否满足某种条件,如果满足,则执行某个操作;如果不满足,则执行另外一个操作。例如,x大于0返回1,小于0返回0,示例代码如下:

     1  x <- c(3,-1,2,-9)
     2  y <- ifelse(x>0, 1, 0)
     3  print(y)

运行程序,结果如下:

     1 0 1 0

例如,在数据处理过程中,将性别中的“女”转换为0,“男”转换为1,示例代码如下:

     1  性别 <- c("男","女","女","女","男","男")
     2  myval <- ifelse(性别 == "女",0,1)
     3  print(myval)

运行程序,结果如下: CpMTo8wR+ojWNDJ8gP6rQzvDNOvp1DbsBR+eZa50O1kMxt9YZQz80Cgf6nwKmdZ6

     1 0 0 0 1 1
点击中间区域
呼出菜单
上一章
目录
下一章
×