3.2 循环控制与条件控制
R语言具有标准的编程语言控制结构。一般情况,R语言顺序执行,依据条件做出是否执行或者反复执行的处理。在本小节中,将依次介绍循环控制和条件控制。
循环控制
循环控制即在条件达成之前重复执行一系列语句。R语言中循环控制的方式主要有两种:for和while。
- for循环
R中最基本的是for循环,其中i为循环变量,n通常是一个序列。i在每次循环时从n中顺序取值,代入到后面的语句中进行运算,直到i超出n的范围,循环停止。计算斐波那契数列前10位数字的for循环代码示例如下:
<- c(1, 1)
x for(i in 3:10){
<- x[i-2] + x[i-1]}
x[i] x
## [1] 1 1 2 3 5 8 13 21 34 55
- while循环
<- c(1, 1)
x <- 3
i while (i <= 10) {
<- x[i-1]+x[i-2]
x[i] <- i +1
i
} x
## [1] 1 1 2 3 5 8 13 21 34 55
条件控制
在条件控制中,语句仅在满足特定条件时执行,当条件不满足,执行结束。条件控制有三种:if-else、ifelse、switch。
- if-else
if-else语句用来进行条件控制,以执行不同的语句。若condition条件件为真,则执行语句1,否则执行语句2。ifesle()函数能以简洁的方式构成条件语句。需要注意的是,else必须放在“}”后面,不可以换行,否则R会认为代码到此结束。
- ifelse
<- c(-4:4)
x ifelse(x>=0, '非负', '负')
## [1] "负" "负" "负" "负" "非负" "非负" "非负" "非负" "非负"
其中,参数test为条件判断语句;参数yes在条件test为True时执行;参数no条件为False时执行。
- switch
其中,expr为表达式,其值或为一个整数值或为一个字符串;list为一个列表。此函数的运行逻辑为:若expr的计算结果为整数,且值在1~length(list)之间时,则switch()函数返回列表相应位置的值。若expr的值超出范围,则没有返回值(若R版本较老,则返回NULL)。