Måns Magnusson
Statistics and Machine learning
Department of computer and information science
Advanced R Programming
Måns Magnusson
Generally difficult to learn
Extra video on coursepage
Two main components
- Conditional statements
- Loops
Advanced R Programming
Måns Magnusson
if( boolean ){ commands } else if ( boolean ) {
if(boolean) {
# commands
} else if (boolean) {
# commands
} else {
# commands
}
Advanced R Programming
Måns Magnusson
for while repeat
Advanced R Programming
Måns Magnusson
for (counter in vector){
# command
}
Advanced R Programming
Måns Magnusson
while (boolean){
# command
}
Advanced R Programming
Måns Magnusson
repeat {
# commands
}
Advanced R Programming
Måns Magnusson
break next
(loop)
(iteration)
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)
“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
Advanced R Programming
Måns Magnusson
my_fun <- function(x, y) {
z <- x + y
return(z)
}
Advanced R Programming
Måns Magnusson
# To access in R
formals(f)
body(f)
environment(f)
Function arguments
Function body
Function environment
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
Advanced R Programming
Måns Magnusson
Parents, but no children
Advanced R Programming
Måns Magnusson
Advanced R Programming
Måns Magnusson
See environments as lists
ls()
Advanced R Programming
Måns Magnusson
e <- new.env()
e$g <- function() 1
y <- 1
f <- function(x) x + y
Advanced R Programming
Måns Magnusson
h <- function(x) {
a <- 2
x + a
}
y <- h(1)
Execution environment
Advanced R Programming
Måns Magnusson
(or how do R find stuff?)
Current environment ->
Parent environment ->
...
Global environment ->
... along searchpath to...
Empty environment (fail)
Advanced R Programming
Måns Magnusson
<-
Shallow assignment
<<-
Deep assignment
assign()
Full control assignment
Advanced R Programming
Måns Magnusson
specify arguments by...
position
complete name
partial name
copy-on-modify semantics
Advanced R Programming
Måns Magnusson
do.call()
missing()
...
Default values
Advanced R Programming
Måns Magnusson
The last expression evaluated in a function
Multiple values using lists
Pure functions
on.exit() return()
Advanced R Programming
Måns Magnusson
infix functions
replacement functions
Advanced R Programming
Måns Magnusson
Higher order functions
Common in mathematics
Advanced R Programming
Måns Magnusson
(Often) faster alt. to loops
Easy to parallelize
Can't handle serial algorithms
More difficult to read code
Advanced R Programming
Måns Magnusson
lapply() vapply() sapply() apply() tapply() mapply()
Advanced R Programming
Måns Magnusson
Programming paradigm
Foundation in R
Advanced R Programming
Måns Magnusson
Functions without names
Often used in functionals
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
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
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
Advanced R Programming
Måns Magnusson
library() :: :::
install.packages() devtools::install_github()
devtools::install_local()
Advanced R Programming
Måns Magnusson
"Dependency hell"
[MAJOR].[MINOR].[PATCH]
Advanced R Programming
Måns Magnusson
Advanced R Programming
Måns Magnusson
1. Who?
2. When updated?
3. In development?