Ch20 Vectors

Using Automic Vectors

sample(10) + 10
##  [1] 19 16 12 14 17 20 18 11 13 15
1:10 + 1:2
##  [1]  2  4  4  6  6  8  8 10 10 12
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:5)
##     a b
## 1   1 1
## 2   2 2
## 3   3 3
## 4   4 4
## 5   5 5
## 6   6 1
## 7   7 2
## 8   8 3
## 9   9 4
## 10 10 5
x <- sample(10)
x
##  [1] 10  3  9  6  1  4  5  7  8  2
x[c(5, 7)]
## [1] 1 5
x[x>5]
## [1] 10  9  6  7  8

Recursive Vectors

pi
## [1] 3.141593
pi %>% typeof()
## [1] "double"
a <- list(a = 1:3, b = "a string", c = pi, d = list(-1, -5))
a
## $a
## [1] 1 2 3
## 
## $b
## [1] "a string"
## 
## $c
## [1] 3.141593
## 
## $d
## $d[[1]]
## [1] -1
## 
## $d[[2]]
## [1] -5
a[1:2]
## $a
## [1] 1 2 3
## 
## $b
## [1] "a string"
a[[4]] %>% typeof()
## [1] "list"
a[[4]][2]
## [[1]]
## [1] -5
a[[4]][2] %>% typeof()
## [1] "list"
a[[4]][[2]]
## [1] -5
a[[4]][[2]] %>% typeof()
## [1] "double"

Ch21 Iteration

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)
}
## [1] 21  0  0  0  0
## [1] 21 22  0  0  0
## [1] 21 22 23  0  0
## [1] 21 22 23 24  0
## [1] 21 22 23 24 25
# output
y
## [1] 21 22 23 24 25
# example 2: string operation - extract fist 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"

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)
}
## [1] 21  0  0  0  0
## [1] 21 22  0  0  0
## [1] 21 22 23  0  0
## [1] 21 22 23 24  0
## [1] 21 22 23 24 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}
22 %>% add_10()
## [1] 32
map_dbl(.x = x, .f = add_10)
## [1] 21 22 23 24 25
# create the data frame
df <- tibble(
    a = rnorm(10),
    b = rnorm(10),
    c = rnorm(10),
    d = rnorm(10)
)

map_dbl(df, mean)
##           a           b           c           d 
##  0.06479129  0.21072924 -0.07314460 -0.18601571
map_dbl(df, median)
##           a           b           c           d 
##  0.10989203  0.30671889 -0.07584076 -0.04193528
map_dbl(df, sd)
##         a         b         c         d 
## 0.7287577 0.8803627 1.1368318 1.2436272