Advanced
programming
Lecture 2


Måns Magnusson
Statistics and Machine learning
Department of computer and information science
Since last time?

Program control

Program control

Advanced R Programming
Måns Magnusson
Generally difficult to learn
Extra video on coursepage
Two main components
- Conditional statements
- Loops
Conditional statements

Advanced R Programming
Måns Magnusson
if( boolean ){ commands } else if ( boolean ) {
if(boolean) {
# commands
} else if (boolean) {
# commands
} else {
# commands
}
Loops

Advanced R Programming
Måns Magnusson
for while repeat
Loops

Advanced R Programming
Måns Magnusson
for (counter in vector){
# command
}
Loops

Advanced R Programming
Måns Magnusson
while (boolean){
# command
}
Loops

Advanced R Programming
Måns Magnusson
repeat {
# commands
}
Controlling loops

Advanced R Programming
Måns Magnusson
break next
(loop)
(iteration)
Controlling loops

Advanced R Programming
Måns Magnusson
for (i in 1:10){
print(i)
if(i > 5) next
}
print(i)
for (i in 1:10){
print(i)
if(i > 5) break
}
print(i)
Functions

“To understand computations in R, two slogans are helpful:
- Everything that exists is an object.
- Everything that happens is a function call."
John Chambers

Advanced R Programming
Måns Magnusson
Functions revisited

Advanced R Programming
Måns Magnusson
my_fun <- function(x, y) {
z <- x + y
return(z)
}
Function components

Advanced R Programming
Måns Magnusson
# To access in R
formals(f)
body(f)
environment(f)
Function arguments
Function body
Function environment
Environments and scoping (or how do R find stuff?)

Environment basics

Advanced R Programming
Måns Magnusson
"bag of names"

e <- new.env()
e$a <- FALSE
e$b <- "a"
e$c <- 2.3
e$d <- 1:3
Environment relatives

Advanced R Programming
Måns Magnusson

Parents, but no children

Advanced R Programming
Måns Magnusson

Work with environments

Advanced R Programming
Måns Magnusson
See environments as lists
ls()
Function environments

Advanced R Programming
Måns Magnusson
- Enclosing (searchpath) environment
- Binding environment


e <- new.env()
e$g <- function() 1
y <- 1
f <- function(x) x + y
Function environments

Advanced R Programming
Måns Magnusson

h <- function(x) {
a <- 2
x + a
}
y <- h(1)
Execution environment
Lexical scoping

Advanced R Programming
Måns Magnusson
(or how do R find stuff?)
Current environment ->
Parent environment ->
...
Global environment ->
... along searchpath to...
Empty environment (fail)
Assignments

Advanced R Programming
Måns Magnusson
<-
Shallow assignment
<<-
Deep assignment
assign()
Full control assignment
Function arguments

Arguments

Advanced R Programming
Måns Magnusson
specify arguments by...
position
complete name
partial name
copy-on-modify semantics
Arguments (cont.)

Advanced R Programming
Måns Magnusson
do.call()
missing()
...
Default values
Returning values

Return values

Advanced R Programming
Måns Magnusson
The last expression evaluated in a function
Multiple values using lists
Pure functions
on.exit() return()
Specials

Specials

Advanced R Programming
Måns Magnusson
infix functions
replacement functions
Functionals

Functionals

Advanced R Programming
Måns Magnusson
Higher order functions
Common in mathematics

Pros

Advanced R Programming
Måns Magnusson
(Often) faster alt. to loops
Easy to parallelize
Cons
Can't handle serial algorithms
More difficult to read code
Common functionals

Advanced R Programming
Måns Magnusson
lapply() vapply() sapply() apply() tapply() mapply()
Functional programming

Functional programming

Advanced R Programming
Måns Magnusson
Programming paradigm
Foundation in R
Anonymous functions

Advanced R Programming
Måns Magnusson
Functions without names
Often used in functionals
Closures

Advanced R Programming
Måns Magnusson
“An object is data with functions. A closure is a function with data.” — John D. Cook
Mutable state functions
Closures example

Advanced R Programming
Måns Magnusson
counter_factory <- function(){
i <- 0
f <- function(){
i <<- i + 1
i
}
f
}
first_counter <- counter_factory()
second_counter <- counter_factory()
first_counter()
first_counter()
second_counter()
ls(environment(first_counter))
environment(first_counter)$i
R packages

R packages

Advanced R Programming
Måns Magnusson
An environment with functions and/or data
The way to share code and data
~4 000 developers
> 7000 packages
Package basics

Advanced R Programming
Måns Magnusson
Installation
Usage
library() :: :::
install.packages() devtools::install_github()
devtools::install_local()
Semantic versioning

Advanced R Programming
Måns Magnusson
"Dependency hell"
[MAJOR].[MINOR].[PATCH]
Package namespace

Advanced R Programming
Måns Magnusson

Examine packages

Advanced R Programming
Måns Magnusson
1. Who?
2. When updated?
3. In development?
Advanced R - Lecture 2
By monsmagn
Advanced R - Lecture 2
Lecture 2 in the course Advanced R programming at Linköping University.
- 1,578