
3.2 循环控制
R语言的循环控制语句包含for、while及repeat,循环中可使用break指令跳出循环,或使用next跳过当前一轮循环尚未执行的语句,直接进入当前循环体的下一轮循环。
R语言的for语法为:

或

其中:
· index:循环索引。
· expr#1:数值或文字向量,例如1:5或c("A","O","B","AB")。
· expr#2:根据index而设计的区块表达式。for循环会将expr#1向量中的每个元素按照顺序以一次一个的方式指定给index,每指定一次,index就会运行一次对应的expr#2表达式。
· {expr#2;…;expr#m}:多个表达式。
例如:

R语言的while循环语法为:

或

其中:
· condition:当condition值为TRUE时,运行循环体内的表达式,并重复运行循环体内的指令直到condition值为FALSE时为止。
· expr#1:一般表达式。
· {expr#1;…;expr#m}:多个表达式。
例如,求1+2++9+10=55。

repeat重复运行表达式,通常在循环中设置检查控制循环的条件并结合break指令,break可用于结束循环,它也是结束repeat循环的唯一办法。
R语言的repeat循环语法为:

其中:
· expr:一个用大括号括起来的区块表达式,必须设置检查循环控制条件,若符合特定的循环控制条件,则利用break指令结束循环。
例如,求1+2+…+9+10=55。

break指令可用于结束循环,它是结束repeat循环的唯一办法;而next指令可用来跳过当前一轮循环尚未执行的语句,直接进入下一轮循环。
例如,求1+3+…+47+49=625。

同其他程序设计语言一样,R语言也常需要用到循环,但R语言循环运行的效率较差,所以应尽量避免使用循环。在R语言中,有些函数如apply()、lapply()及sapply()等,可以更有效率地运行类似循环的指令。
apply(x,MARGIN,FUN,...)函数的作用是将一个指定函数的计算运用于数组或矩阵的每一列或每一行。
其中:
· x:要进行计算的目标数组或矩阵。
· MARGIN:其值=1或2。1表示行,2表示列。
· FUN:为指定的函数。
例如,调用sum()函数求出数组的每一行的总数。

例如,调用sum()函数求出数组的每一列的总数。

lapply(X,FUN,...)函数的作用是将一个指定函数的计算运用于列表对象X的每一元素,并返回一个列表对象,且返回的列表对象的长度与原列表对象X的长度一致。
例如:

sapply(X,FUN,...)函数的功能与lapply(X,FUN,...)函数的功能类似,但其返回一个向量或矩阵对象。
