Ch20 Vectors
Introduction
Vector basics
Important Types of Automic Vectors
Using Automic Vectors
sample(10) + 10
## [1] 17 16 13 19 12 15 18 11 20 14
1:10 + 1:2
## [1] 2 4 4 6 6 8 8 10 10 12
1:10 + 1:3
## Warning in 1:10 + 1:3: longer object length is not a multiple of shorter object
## length
## [1] 2 4 6 5 7 9 8 10 12 11
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] 9 8 7 6 3 2 4 5 10 1
x[c(5, 7)]
## [1] 3 4
x[x>5]
## [1] 9 8 7 6 10
Recursive Vectors
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]]
## [[1]]
## [1] -1
##
## [[2]]
## [1] -5
a[[4]][2]
## [[1]]
## [1] -5
a[[4]][[2]]
## [1] -5
Attributes
x <- 1:10
attr(x, "greeting")
## NULL
attr(x, "greeting") <- "Hi!"
attr(x, "farewell") <- "Bye!"
attributes(x)
## $greeting
## [1] "Hi!"
##
## $farewell
## [1] "Bye!"
as.Date
## function (x, ...)
## UseMethod("as.Date")
## <bytecode: 0x000001d14b2661c8>
## <environment: namespace:base>
methods("as.Date")
## [1] as.Date.character as.Date.default as.Date.factor
## [4] as.Date.numeric as.Date.POSIXct as.Date.POSIXlt
## [7] as.Date.vctrs_sclr* as.Date.vctrs_vctr*
## see '?methods' for accessing help and source code
getS3method("as.Date", "default")
## function (x, ...)
## {
## if (inherits(x, "Date"))
## x
## else if (is.null(x))
## .Date(numeric())
## else if (is.logical(x) && all(is.na(x)))
## .Date(as.numeric(x))
## else stop(gettextf("do not know how to convert '%s' to class %s",
## deparse1(substitute(x)), dQuote("Date")), domain = NA)
## }
## <bytecode: 0x000001d14b752868>
## <environment: namespace:base>
Augmented Vectors
Factors
x <- factor(c("ab", "cd", "ab"), levels = c("ab", "cd", "ef"))
typeof(x)
## [1] "integer"
attributes(x)
## $levels
## [1] "ab" "cd" "ef"
##
## $class
## [1] "factor"
Ch21 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 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"
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