在正常情况下,R程序中的语句是从上至下顺序执行的,控制流可以实现在特定情况下执行另外的语句。R语言拥有一般现代编程语言中都有的标准控制结构。

基本概念:

  1. 语句(statement)是单的R语句或一组符合语句(包含花括号{}中的一组R语句,使用分好分隔);
  2. 条件(cond)是一条最终被解析为真或者假的表达式;
  3. 表达式(expr)是一条数值或字符串的求值语句;
  4. 序列(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