决策语句是一类可以控制程序按条件执行不同代码块的语句。在R语言中,决策语句主要包括if语句和switch语句。
由if语句引导的选择结构有if结构、if...else结构和if...else if...else结构三种。
if结构流程如图2-1所示,首先测试条件表达式,如果为TRUE则执行代码块,否则就执行if语句结构后面的语句。
图2-1 if结构流程
if结构语法如下。
if结构示例代码如下。
这段代码的作用是从控制台读取用户输入的整数,并判断这个整数是否大于5。
上述示例代码解释如下。
代码第①行中使用readline()函数从控制台读取用户的输入,输入会作为字符串返回。然后使用as.integer()函数将字符串转换为整数,并将结果保存到变量x中。
上述示例代码运行到第①行时,程序会挂起,等待用户输入,如图2-2所示。如果我们输入一个有效的整数,然后按Enter键,程序会继续执行。程序运行结果如图2-3所示。
图2-2 程序会挂起等待用户输入
图2-3 程序运行结果
if...else结构流程如图2-4所示,首先测试条件表达式,如果值为TRUE,则执行代码块1,如果条件表达式为FALSE,则忽略代码块1而直接执行代码块2,然后继续执行后面的语句。
图2-4 if...else结构流程
if...else结构语法如下。
if...else结构示例代码如下。
上述代码的解释如下。
(1)提示输入考试分数。
(2)读取输入score变量。
(3)根据score值判断分数及格或不及格并打印。
读者可以自己运行上述代码,具体过程这里不再赘述。
if...else if...else结构实际上是if...else结构的多层嵌套,它的特点是在多个分支中只执行一个分支中的代码块,而其他分支都不执行,所以这种结构可以用于有多种判断结果的分支中。
if...else if...else结构语法如下。
if...else if...else结构示例代码如下。
上述代码从控制台读取用户输入的分数,然后转换为F~A等级。
上述示例代码解释如下。
代码第①行NA 代表“Not Available”(不可用),是一种特殊的值,用于表示空值或缺失值。
读者可以自己运行上述代码,具体过程这里不再赘述。
if...else if...else结构使用起来很麻烦,R语言还提供了switch语句实现多个分支的条件判断,其基本形式如下。
switch 语句必须遵循下面的规则。
switch 语句中的 expression表达式结果值,可以是整数或字符串。
如果是整数则返回对应的case位置值,如果整数不在位置的范围内则返回 NULL。如果是字符串,则对应的是case中的变量名对应的值,没有匹配则没有返回值。
switch 没有默认参数可用。
(1)switch 表达式结果值是整数时的示例代码如下。
上述代码允许用户从控制台输入一个整数(1到7之间的值),然后根据输入的整数值选择并显示相应的消息。
上述示例代码的具体运行过程不再赘述。
(2)switch 表达式结果值是字符串时的示例代码如下。
上述代码允许用户从控制台输入一个星期几的中文名称,然后根据输入的星期几来选择不同的消息进行输出。
上述示例代码的具体运行过程不再赘述。