Daniel Vaulot
2021-01-26
1 - Introduction to R
2 - R markdown
3 - Git
4 - Data wrangling
5 - Data visualisation
6 - Making maps
Your turn...
Your turn...
Warning
Mid 1970s - S Language for Statistical Computing conceived by John Chambers, Rick Becker, Trevor Hastie, Allan Wilks and others at Bell Labs
Early 1990's - R was first implemented in the early 1990’s by Robert Gentleman and Ross Ihaka, both faculty members at the University of Auckland.
1995 - Open Source Project
1997 - Managed by the R Core Group
2000 - First release of R
2011 - First release of R studio
Experimental design course
print("Hello world")
[1] "Hello world"
print("Hello world")
[1] "Hello world"
Type directly in command window
Create a new script
Type in script window, select and execute (CTRL-R)
> greeting = "Hello world"> print(greeting)
[1] "Hello world"
> greeting = "Hello world"> print(greeting)
[1] "Hello world"
> greeting = "Bonjour"> print(greeting)
[1] "Bonjour"
> x <- 1> y <- 2> x + y
[1] 3
> x <- 1> y <- 2> x + y
[1] 3
> z <- x + y> z
[1] 3
= can be used instead of <- but refrain from it (not good style)
> z = x + y
= can be used instead of <- but refrain from it (not good style)
> z = x + y
You can view the values of the objects in R-studio environment window (top-right)
> Z
> Z
> Z
Error in eval(expr, envir, enclos): object 'Z' not found
Myvariable
, Myvariable1
, Myvariable.1
,Myvariable-01
are OK1Myvariable
, My-variable
, Myvariable@
are not OKFive conventions
Prefer third one, much more easy to read
character: "Daniel", "This is a course in R", 'Donald'
numeric: 2, 15.5, 10e-3
integer: 2L (the L tells R to store this as an integer)
date: 2018-02-25
logical: TRUE, FALSE
complex: 1+4i (complex numbers with real and imaginary parts)
character: "Daniel", "This is a course in R", 'Donald'
numeric: 2, 15.5, 10e-3
integer: 2L (the L tells R to store this as an integer)
date: 2018-02-25
logical: TRUE, FALSE
complex: 1+4i (complex numbers with real and imaginary parts)
No data "NA"
Not a number "NaN" (e.g. division by zero)
Vector
List
Matrix
Data frames
Function
The basic R structure is a vector: ⎡⎢⎣102030⎤⎥⎦
The basic R structure is a vector: ⎡⎢⎣102030⎤⎥⎦
A vector can contain only a single element [10]
The basic R structure is a vector: ⎡⎢⎣102030⎤⎥⎦
A vector can contain only a single element [10]
x <- 10x
[1] 10
x <- c(10, 20, 30)x
[1] 10 20 30
x <- c(10, 20, 30)x
[1] 10 20 30
x <- 10:30x
[1] 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30
PoTU <- c("Jo", "Biden")PoTU
[1] "Jo" "Biden"
flags <- c(TRUE, FALSE, TRUE)flags
[1] TRUE FALSE TRUE
x[1]
[1] 10
x[1]
[1] 10
x[1:5]
[1] 10 11 12 13 14
x[1]
[1] 10
x[1:5]
[1] 10 11 12 13 14
x[-1]
[1] 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30
Apply functions (we will come back to functions latter)
typeof(x)length(x)
Apply functions (we will come back to functions latter)
typeof(x)length(x)
[1] "integer"
[1] 21
Apply functions (we will come back to functions latter)
typeof(x)length(x)
[1] "integer"
[1] 21
What is the type and length of PoTU ?
Operator | Description |
---|---|
+ | addition |
- | subtraction |
* | multiplication |
/ | division |
^ or ** | exponentiation |
x %% y | modulus (x mod y) 5%%2 is 1 |
x %/% y | integer division 5%/%2 is 2 |
We are performing vector operations !
⎡⎢ ⎢ ⎢⎣123..⎤⎥ ⎥ ⎥⎦+⎡⎢ ⎢ ⎢⎣123..⎤⎥ ⎥ ⎥⎦=⎡⎢ ⎢ ⎢⎣246..⎤⎥ ⎥ ⎥⎦
Vector one element
x <- 1 y <- 2 z <- x + y z
[1] 3
Vector several elements
# Two instructions on the same line x <- 1:9; y <- 1:9 z <- x + y z
[1] 2 4 6 8 10 12 14 16 18
Vector several elements
# Two instructions on the same line x <- 1:9; y <- 1:9 z <- x + y z
[1] 2 4 6 8 10 12 14 16 18
Vector several elements
# Two instructions on the same line x <- 1:9; y <- 1:9 z <- x + y z
[1] 2 4 6 8 10 12 14 16 18
Use the other operators
What happens when the vectors have different number of elements ?
x <- 1:9y <- 1z <- x + yz
What happens when the vectors have different number of elements ?
x <- 1:9y <- 1z <- x + yz
[1] 2 3 4 5 6 7 8 9 10
What happens when the vectors have different number of elements ?
x <- 1:9y <- 1z <- x + yz
[1] 2 3 4 5 6 7 8 9 10
Equivalent to
y <- c(1, 1, 1, 1, 1, 1, 1, 1, 1)
The recycling rule...
x <- TRUEy <- FALSEz <- x + yz
x <- TRUEy <- FALSEz <- x + yz
[1] 1
No error but...
The resulting variable is transformed to a numeric
How you would show that ?
No error but...
The resulting variable is transformed to a numeric
How you would show that ?
typeof(x)
[1] "logical"
typeof(z)
[1] "integer"
Operator | Description |
---|---|
< | less than |
<= | less than or equal to |
> | greater than |
>= | greater than or equal to |
== | exactly equal to |
!= | not equal to |
!x | Not x |
x | y | x OR y |
x & y | x AND y |
isTRUE(x) | test if X is TRUE |
x <- TRUEy <- FALSEz1 <- x | yz2 <- x == y
x <- TRUEy <- FALSEz1 <- x | yz2 <- x == y
[1] TRUE
[1] FALSE
Do not mix
first <- "Jo"last <- "Biden"full <- first + last
first <- "Jo"last <- "Biden"full <- first + last
Generates an error
Error in first + last: non-numeric argument to binary operator
first <- "Jo"last <- "Biden"full <- first + last
Generates an error
Error in first + last: non-numeric argument to binary operator
What can we do ?
Functions perform specific task on objects
Functions perform specific task on objects
paste(first, last)
[1] "Jo Biden"
Functions perform specific task on objects
paste(first, last)
[1] "Jo Biden"
Functions take arguments and return an object called result
To know the arguments use ?
? paste() # Do not forget the parenthesis
Functions perform specific task on objects
paste(first, last)
[1] "Jo Biden"
Functions take arguments and return an object called result
To know the arguments use ?
? paste() # Do not forget the parenthesis
What happened ?
Functions perform specific task on objects
paste(first, last)
[1] "Jo Biden"
Functions take arguments and return an object called result
To know the arguments use ?
? paste() # Do not forget the parenthesis
What happened ?
Let's apply paste :
paste(first, last)
[1] "Jo Biden"
Let's apply paste :
paste(first, last)
[1] "Jo Biden"
paste(first, last, sep = "_")
[1] "Jo_Biden"
If you write 3 times the same piece of code write a function...
my_sum <- function(a, b) { c <- a + b return(c)}
If you write 3 times the same piece of code write a function...
my_sum <- function(a, b) { c <- a + b return(c)}
my_sum <- function(a, b) {a + b}
my_sum(10, 20)
[1] 30
my_sum(10, 20)
[1] 30
my_sum(a = 10, b = 20)
[1] 30
Most of the time you do not have to write functions because someone has already written one for what you want to do...
x <- 1:100sum(x)
[1] 5050
Most of the time you do not have to write functions because someone has already written one for what you want to do...
x <- 1:100sum(x)
[1] 5050
y <- rnorm(10, mean = 0, sd = 1)y
[1] 0.72247971 0.20521127 0.45698723 0.08563865 0.98998049 -0.11958863 [7] 0.22778884 1.15945271 -0.08842998 0.99219102
mean(y)
[1] 0.4631711
sd(y)
[1] 0.473501
mean(y)
[1] 0.4631711
sd(y)
[1] 0.473501
Sample more points... 10,000 instead of 100
y <- rnorm(10000, mean = 0, sd = 1)mean(y)
[1] -0.0150854
sd(y)
[1] 1.004672
Histogram
library(graphics)hist(y)
Packages are set of functions that have a common goal
They are really the strength of R
And these are only the "official"" packages. You can find more on GitHub
Download on your computer the package you need
Install package stringr (to manipulate strings of characters)
To use functions from the package
package::function
stringr::str_c(first, last, sep = " ")
[1] "Jo Biden"
To use functions from the package
package::function
stringr::str_c(first, last, sep = " ")
[1] "Jo Biden"
library(stringr)str_c(first, last, sep = " ")
[1] "Jo Biden"
To use functions from the package
package::function
stringr::str_c(first, last, sep = " ")
[1] "Jo Biden"
library(stringr)str_c(first, last, sep = " ")
[1] "Jo Biden"
Sometimes functions from different libraries have similar names
What you will learn :
Please install the following packages and their dependencies
Installation : https://bookdown.org/yihui/rmarkdown/installation.html
1 - Introduction to R
2 - R markdown
3 - Git
4 - Data wrangling
5 - Data visualisation
6 - Making maps
Keyboard shortcuts
↑, ←, Pg Up, k | Go to previous slide |
↓, →, Pg Dn, Space, j | Go to next slide |
Home | Go to first slide |
End | Go to last slide |
Number + Return | Go to specific slide |
b / m / f | Toggle blackout / mirrored / fullscreen mode |
c | Clone slideshow |
p | Toggle presenter mode |
t | Restart the presentation timer |
?, h | Toggle this help |
Esc | Back to slideshow |