在正常情况下,R程序中的语句是从上至下顺序执行的,控制流可以实现在特定情况下执行另外的语句。R语言拥有一般现代编程语言中都有的标准控制结构。
基本概念:
- 语句(statement)是单的R语句或一组符合语句(包含花括号{}中的一组R语句,使用分好分隔);
- 条件(cond)是一条最终被解析为真或者假的表达式;
- 表达式(expr)是一条数值或字符串的求值语句;
- 序列(seq)是一个数值或字符串序列。
重复和循环
循环结构重复的执行一个或一系列语句,知道某个条件不为真为止。循环结构包括for和while结构
1. for结构
for循环重复执行一个语句,知道某个变量的值不再包含在序列seq中为止。语法为:
for(var in seq) statement
例子:
for(i in 1:10) print("Hello")
单词Hello被输出了10次。
2. while结构
while循环重复的执行一个语句,知道条件不为真为止。语法为:
while(cond) statement
i <- 10 while(i>0) {print("Hello"); i <- i-1}
请确保括号内while的条件语句能改变为假,否则循环将不会停止。
在处理大数据集中的行和列时,R中的循环可能比较低效费时。只要可能,最好联用R中的内建数值/字符处理函数和apply族函数。
条件执行
在条件执行结构中,一条或一组语句仅在满足一个指定条件时执行。条件执行结构包括if-else、ifelse和switch。
1. if-else结构
控制流结构if-else在某个给定条件为真/假时执行语句。语法为:
if (cond) statement
例子:
if (is.character(grade)) grade <- as.factor(grade) if(!is.factor(grade)) grade <- as.factor(grade) else print("Grade already is a factor")
2. ifelse结构
ifelse结构是if-else结构比较紧凑的向量化版本,语法为:
ifelse(cond, statement1, statement2)
若cond为TRUE,则执行第一个语句,否则执行第二个语句。
例子:
ifelse(score > 0.5, print("Passed"), print("Failed"))
3.switch结构
switch根据一个表达式的值选择语句执行。语法:
switch(expr, …)
其中的…表示与expr的各种可能输出绑定的语句。示例:
> feelings <- c("sad", "afraid") > for(i in feelings) print( switch(i, happy = "I am glad you are happy", afraid = "There is nothing to fear", sad = "Cheer up" )
2014-2-10 12:19:10