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,411