Control {base}R Documentation

Control Flow


These are the basic control-flow constructs of the R language. They function in much the same way as control statements in any Algol-like language.


if(cond) expr
if(cond) cons.expr  else  alt.expr

for(var in seq) expr
while(cond) expr
repeat expr


cond A length-one logical vector that is not NA. Conditions of length greater than one are accepted with a warning, but only the first element is used.
var A syntactical name for a variable.
seq An expression evaluating to a vector (including a list and an expression) or to a pairlist or NULL.
expr, cons.expr, alt.expr An expression in a formal sense. This is either a simple expression or a so called compound expression, usually of the form { expr1 ; expr2 }.


break breaks out of a for, while or repeat loop; control is transferred to the first statement outside the inner-most loop. next halts the processing of the current iteration and advances the looping index. Both break and next apply only to the innermost of nested loops.

Note that it is a common mistake to forget to put braces ({ .. }) around your statements, e.g., after if(..) or for(....). In particular, you should not have a newline between } and else to avoid a syntax error in entering a if ... else construct at the keyboard or via source. For that reason, one (somewhat extreme) attitude of defensive programming is to always use braces, e.g., for if clauses.

The index seq in a for loop is evaluated at the start of the loop; changing it subsequently does not affect the loop. The variable var has the same type as seq, and is read-only: assigning to it does not alter seq. If seq is a factor (which is not strictly allowed) then its internal codes are used: the effect is that of as.integer not as.vector.


if returns the value of the expression evaluated, or NULL if none was (which may happen if there is no else).
for, while and repeat return the value of the last expression evaluated (or NULL if none was), invisibly. for sets var to the last used element of seq, or to NULL if it was of length zero.
break and next have value NULL, although it would be strange to look for a return value.


Becker, R. A., Chambers, J. M. and Wilks, A. R. (1988) The New S Language. Wadsworth & Brooks/Cole.

See Also

Syntax for the basic R syntax and operators, Paren for parentheses and braces; further, ifelse, switch.


for(i in 1:5) print(1:i)
for(n in c(2,5,10,20,50)) {
   x <- rnorm(n)
   cat(n,":", sum(x^2),"\n")

[Package base version 2.5.0 Index]