What is "vectorization"?
vectorization.RdWhat is "vectorization"?
Vectorization explained
Many R operations/functions are "vectorized," meaning that they take in vectors and output vectors that are the same length. This means that we, as programmers, don't need to worry about each element of the vector; We can treat a vector like a single object, and R will oblige us. For example, we can do math like:
2^(0:10) - 1
#> [1] 0 1 3 7 15 31 63 127 255 511 1023
(1:10) - (10:1)
#> [1] -9 -7 -5 -3 -1 1 3 5 7 9
sqrt(c(5, 10, 16))
#> [1] 2.236068 3.162278 4.000000Or work with strings like:
paste(1:26, letters, sep = ': ')
#> [1] "1: a" "2: b" "3: c" "4: d" "5: e" "6: f" "7: g" "8: h" "9: i" "10: j" "11: k" "12: l"
#> [13] "13: m" "14: n" "15: o" "16: p" "17: q" "18: r" "19: s" "20: t" "21: u" "22: v" "23: w" "24: x"
#> [25] "25: y" "26: z"
paste('Chord', 1:10)
#> [1] "Chord 1" "Chord 2" "Chord 3" "Chord 4" "Chord 5" "Chord 6" "Chord 7" "Chord 8"
#> [9] "Chord 9" "Chord 10"
# Regular expressions:
grepl('[aeiou]', letters)
#> [1] TRUE FALSE FALSE FALSE TRUE FALSE FALSE FALSE TRUE FALSE FALSE FALSE FALSE FALSE TRUE FALSE
#> [17] FALSE FALSE FALSE FALSE TRUE FALSE FALSE FALSE FALSE FALSEOr get logical values:
2^(0:100) > 50
#> [1] FALSE FALSE FALSE FALSE FALSE FALSE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
#> [17] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
#> [33] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
#> [49] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
#> [65] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
#> [81] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
#> [97] TRUE TRUE TRUE TRUE TRUE
1:10 %% 2 == 0
#> [1] FALSE TRUE FALSE TRUE FALSE TRUE FALSE TRUE FALSE TRUE
1:20 %in% 2^(0:4)
#> [1] TRUE TRUE FALSE TRUE FALSE FALSE FALSE TRUE FALSE FALSE FALSE FALSE FALSE FALSE FALSE TRUE
#> [17] FALSE FALSE FALSE FALSEOf course, other R functions take in vectors and return totally new vectors (or just scalars). Examples:
length(seq(50, 90, by = .2))
#> [1] 201
length(letters) # letters is a built-in vector which is always there!
#> [1] 26
sum(c(1, 5, 9))
#> [1] 15
mean(c(1, 5, 9))
#> [1] 5
max(c(1, 5, 9))
#> [1] 9
range(c(1, 100, 2, -4))
#> [1] -4 100
which(c(TRUE, FALSE, TRUE, TRUE))
#> [1] 1 3 4Vectorization works very well when you are working with vectors that are either 1) all the same length or 2) length 1 (scalar). If vectors are different lengths, the shorter one will be "recycled" (repeated) to match the longer one.
See also
Other R lessons.:
evaluatingExpressions,
groupingFactors,
partialMatching,
recycling