Ch 20 Vectors

1 Introduction

2 Vector basics

3 Important types of atomic vector

4 Using atomic vectors

sample(10) + 10
##  [1] 13 14 12 17 20 15 11 19 18 16
1.10 + 1:2
## [1] 2.1 3.1
1.10 + 1:3
## [1] 2.1 3.1 4.1
data.frame(a=1:10, b=1:2)
##     a b
## 1   1 1
## 2   2 2
## 3   3 1
## 4   4 2
## 5   5 1
## 6   6 2
## 7   7 1
## 8   8 2
## 9   9 1
## 10 10 2
# data.frame(a=1:10, b=1:3)
x <- sample(10)
x
##  [1]  5  2  7  9  6  8  1  3  4 10
x[c(5,7)]
## [1] 6 1
x[x>5]
## [1]  7  9  6  8 10

5 Recursive vectors

6 Attributes

7 Augmented vectors

Ch 21 Iteration

Introduction

For loops

# example from the cheatsheet
for (i in 1:4) {
    j <- i + 10
    print(j)
}
## [1] 11
## [1] 12
## [1] 13
## [1] 14
# example 1: numeric calculation - add 10
x <- 11:15

for (i in seq_along(x)) {
    j <- x[i] + 10
    print(j)
}
## [1] 21
## [1] 22
## [1] 23
## [1] 24
## [1] 25
# save output
y <- vector("integer", length(x))

for (i in seq_along(x)) {
    y[i] <- x[i] + 10
    print(y[i])
}
## [1] 21
## [1] 22
## [1] 23
## [1] 24
## [1] 25
# output
y
## [1] 21 22 23 24 25
# example 2: string operation - extract the first letter
x <- c("abc", "xyz")

y <- vector("character", length(x))

for (i in seq_along(x)) {
    y[i] <- x[i] %>% str_extract("[a-z]")
    print(y[i])
}
## [1] "a"
## [1] "x"
# output
y
## [1] "a" "x"

For loop variations

For loops vs functionals

The map functions

# example 1: numeric calculation - add 10
x <- 11:15

y <- vector("integer", length(x))

for (i in seq_along(x)) {
    y[i] <- x[i] + 10
    print(y[i])
}
## [1] 21
## [1] 22
## [1] 23
## [1] 24
## [1] 25
# output
y
## [1] 21 22 23 24 25
# using map function
x
## [1] 11 12 13 14 15
map(.x=x, .f= ~.x+10)
## [[1]]
## [1] 21
## 
## [[2]]
## [1] 22
## 
## [[3]]
## [1] 23
## 
## [[4]]
## [1] 24
## 
## [[5]]
## [1] 25
map_dbl(.x=x, .f= ~.x+10)
## [1] 21 22 23 24 25
add_10 <- function(x) {x+10}
11 %>% add_10()
## [1] 21
map_dbl(.x=x, .f= add_10)
## [1] 21 22 23 24 25