Rev 82652 | Blame | Compare with Previous | Last modification | View Log | Download | RSS feed
% File src/library/base/man/Control.Rd% Part of the R package, https://www.R-project.org% Copyright 1995-2022 R Core Team% Distributed under GPL 2 or later\name{Control}\alias{Control}\alias{if}\alias{else}\alias{for}\alias{in}\alias{while}\alias{repeat}\alias{break}\alias{next}\title{Control Flow}\description{These are the basic control-flow constructs of the \R language. Theyfunction in much the same way as control statements in any Algol-likelanguage. They are all \link{reserved} words.}\usage{if(cond) exprif(cond) cons.expr else alt.exprfor(var in seq) exprwhile(cond) exprrepeat exprbreaknext}\arguments{\item{cond}{A length-one logical vector that is not \code{NA}.Other types are coerced to logical if possible, ignoring any class.(Conditions of length greater than one are an error.)}\item{var}{A syntactical name for a variable.}\item{seq}{An expression evaluating to a vector (including a list andan \link{expression}) or to a \link{pairlist} or \code{NULL}. Afactor value will be coerced to a character vector. This can be along vector.}\item{expr, cons.expr, alt.expr}{An \emph{expression} in a formal sense. This is either asimple expression or a so-called \emph{compound expression}, usuallyof the form \code{\{ expr1 ; expr2 \}}.}}\details{\code{break} breaks out of a \code{for}, \code{while} or \code{repeat}loop; control is transferred to the first statement outside theinner-most loop. \code{next} halts the processing of the currentiteration and advances the looping index. Both \code{break} and\code{next} apply only to the innermost of nested loops.Note that it is a common mistake to forget to put braces (\code{\{ .. \}})around your statements, e.g., after \code{if(..)} or \code{for(....)}.In particular, you should not have a newline between \code{\}} and\code{else} to avoid a syntax error in entering a \code{if ... else}construct at the keyboard or via \code{source}.For that reason, one (somewhat extreme) attitude of defensive programmingis to always use braces, e.g., for \code{if} clauses.The \code{seq} in a \code{for} loop is evaluated at the start ofthe loop; changing it subsequently does not affect the loop. If\code{seq} has length zero the body of the loop is skipped. Otherwise thevariable \code{var} is assigned in turn the value of each element of\code{seq}. You can assign to \code{var} within the body of the loop,but this will not affect the next iteration. When the loop terminates,\code{var} remains as a variable containing its latest value.}\value{\code{if} returns the value of the expression evaluated, or\code{NULL} invisibly if none was (which may happen if there is no\code{else}).\code{for}, \code{while} and \code{repeat} return \code{NULL} invisibly.\code{for} sets \code{var} to the last used element of \code{seq},or to \code{NULL} if it was of length zero.\code{break} and \code{next} do not return a value as they transfercontrol within the loop.}\references{Becker, R. A., Chambers, J. M. and Wilks, A. R. (1988)\emph{The New S Language}.Wadsworth & Brooks/Cole.}\seealso{\code{\link{Syntax}} for the basic \R syntax and operators,\code{\link{Paren}} for parentheses and braces.\code{\link{ifelse}}, \code{\link{switch}} for other ways to control flow.}\examples{for(i in 1:5) print(1:i)for(n in c(2,5,10,20,50)) {x <- stats::rnorm(n)cat(n, ": ", sum(x^2), "\n", sep = "")}f <- factor(sample(letters[1:5], 10, replace = TRUE))for(i in unique(f)) print(i)}\keyword{programming}\keyword{iteration}\keyword{logic}