3.2 循环控制与条件控制

R语言具有标准的编程语言控制结构。一般情况,R语言顺序执行,依据条件做出是否执行或者反复执行的处理。在本小节中,将依次介绍循环控制和条件控制。

循环控制

循环控制即在条件达成之前重复执行一系列语句。R语言中循环控制的方式主要有两种:for和while。

  1. for循环

R中最基本的是for循环,其中i为循环变量,n通常是一个序列。i在每次循环时从n中顺序取值,代入到后面的语句中进行运算,直到i超出n的范围,循环停止。计算斐波那契数列前10位数字的for循环代码示例如下:

x <- c(1, 1)
for(i in 3:10){
x[i] <- x[i-2] + x[i-1]}
x
##  [1]  1  1  2  3  5  8 13 21 34 55
  1. while循环
当不能确定循环次数时,我们需要用while循环语句。在条件为真时,执行特定一组的语句。下面是以while循环来计算10个斐波那契数的代码示例:
x <- c(1, 1)
i <- 3
while (i <= 10) {
    x[i] <- x[i-1]+x[i-2]
    i <- i +1
}
x
##  [1]  1  1  2  3  5  8 13 21 34 55

条件控制

在条件控制中,语句仅在满足特定条件时执行,当条件不满足,执行结束。条件控制有三种:if-else、ifelse、switch。

  1. if-else
if语句的语法为:

if-else语句用来进行条件控制,以执行不同的语句。若condition条件件为真,则执行语句1,否则执行语句2。ifesle()函数能以简洁的方式构成条件语句。需要注意的是,else必须放在“}”后面,不可以换行,否则R会认为代码到此结束。

  1. ifelse
ifelse是if-else的向量化版本,在对向量进行赋值时非常便捷。常用代码示例如下:
x <- c(-4:4)
ifelse(x>=0, '非负', '负')
## [1] "负"   "负"   "负"   "负"   "非负" "非负" "非负" "非负" "非负"

其中,参数test为条件判断语句;参数yes在条件test为True时执行;参数no条件为False时执行。

  1. switch
R语言中的switch与其它语言中的switch有一定区别。在R中,switch函数的常用形式如下:

其中,expr为表达式,其值或为一个整数值或为一个字符串;list为一个列表。此函数的运行逻辑为:若expr的计算结果为整数,且值在1~length(list)之间时,则switch()函数返回列表相应位置的值。若expr的值超出范围,则没有返回值(若R版本较老,则返回NULL)。