Control package:base R Documentation _C_o_n_t_r_o_l _F_l_o_w _D_e_s_c_r_i_p_t_i_o_n: 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. They are all reserved words. _U_s_a_g_e: if(cond) expr if(cond) cons.expr else alt.expr for(var in seq) expr while(cond) expr repeat expr break next _A_r_g_u_m_e_n_t_s: 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. Other types are coerced to logical if possible, ignoring any class. 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'. A factor value will be coerced to a character vector. 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 }'. _D_e_t_a_i_l_s: '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 'seq' in a 'for' loop is evaluated at the start of the loop; changing it subsequently does not affect the loop. If 'seq' is 'NULL' the body of the loop is skipped. Otherwise the variable 'var' is assigned in turn the value of each element of 'seq'. You can assign to 'var' within the body of the loop, but this will not affect the next iteration. When the loop terminates, 'var' remains as a variable containing its latest value. _V_a_l_u_e: '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. _R_e_f_e_r_e_n_c_e_s: Becker, R. A., Chambers, J. M. and Wilks, A. R. (1988) _The New S Language_. Wadsworth & Brooks/Cole. _S_e_e _A_l_s_o: 'Syntax' for the basic R syntax and operators, 'Paren' for parentheses and braces; further, 'ifelse', 'switch'. _E_x_a_m_p_l_e_s: 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") } f = factor(sample(letters[1:5], 10, replace=TRUE)) for( i in unique(f) ) print(i)