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

  1. Enclosing (searchpath) environment
  2. 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