Grouping, Loops and Conditional Execution
Grouping, Loops and Conditional Execution
• Grouped expressions
– R is an expression language in the sense that its only command type is a
function or expression which returns a result.
– Commands may be grouped together in braces, {expr 1, . . ., expr m}, in
which case the value of the group is the result of the last expression in the
group evaluated.
• Control statements
– if statements
– The language has available a conditional construction of the form
if (expr 1) expr 2 else expr 3
where expr 1 must evaluate to a logical value and the result of the entire
expression is then evident.
– a vectorized version of the if/else construct, the ifelse function. This has
the form ifelse(condition, a, b)
Repetitive execution
• for loops, repeat and while
–for (name in expr 1) expr 2
where name is the loop variable. expr 1 is a vector expression,
(often a sequence like 1:20), and expr 2 is often a grouped
expression with its sub-expressions written in terms of the
dummy name. expr 2 is repeatedly evaluated as name ranges
through the values in the vector result of expr 1.
• Other looping facilities include the
–repeat expr statement and the
–while (condition) expr statement.
–The break statement can be used to terminate any loop,
possibly abnormally. This is the only way to terminate repeat
loops.
–The next statement can be used to discontinue one particular
cycle and skip to the “next”.
Branching
if (logical expression) {
statements
} else {
alternative statements
}
for(i in 1:10) {
print(i*i)
}
i=1
while(i<=10) {
print(i*i)
i=i+sqrt(i)
}
lapply, sapply, apply
• When the same or similar tasks need to be performed multiple times for all elements of
a list or for all columns of an array.
• May be easier and faster than “for” loops
• lapply(li, function )
• To each element of the list li, the function function is applied.
• The result is a list whose elements are the individual function results.
> li = list("klaus","martin","georg")
> lapply(li, toupper)
> [[1]]
> [1] "KLAUS"
> [[2]]
> [1] "MARTIN"
> [[3]]
> [1] "GEORG"
lapply, sapply, apply
sapply( li, fct )
Like apply, but tries to simplify the result, by converting it into a vector or array of
appropriate size
> li = list("klaus","martin","georg")
> sapply(li, toupper)
[1] "KLAUS" "MARTIN" "GEORG"
Example:
add = function(a,b)
{ result = a+b
return(result) }
Operators:
Short-cut writing for frequently used functions of one or two arguments.
Examples: + - * / ! & | %%
functions and operators
• Functions do things with data
• “Input”: function arguments (0,1,2,…)
• “Output”: function result (exactly one)
Exceptions to the rule:
• Functions may also use data that sits around in other places, not just in their
argument list: “scoping rules”*
• Functions may also do other things than returning a result. E.g., plot something on
the screen: “side effects”
Most programs (e.g. Excel), as well as humans, know how to deal with rectangular tables
in the form of tab-delimited text files.
> x = read.delim(“filename.txt”)
also: read.table, read.csv