library(tidyverse)
## Loading tidyverse: ggplot2
## Loading tidyverse: tibble
## Loading tidyverse: tidyr
## Loading tidyverse: readr
## Loading tidyverse: purrr
## Loading tidyverse: dplyr
## Conflicts with tidy packages ----------------------------------------------
## filter(): dplyr, stats
## lag():    dplyr, stats
set.seed(11091987)

Write a for loop to square a value

Write a for loop that calculates the square of each element in a vector.

  • Output - a numeric vector of length 30
  • Sequence - i in seq_along(x)
  • Body - square the \(i\)th element of the vector x, store the new value as the \(i\)th element of the vector output
x <- 1:30
x
##  [1]  1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
## [24] 24 25 26 27 28 29 30
output <- vector("integer", length(x))

for(i in seq_along(x)){
  output[[i]] <- x[[i]]^2
}

output
##  [1]   1   4   9  16  25  36  49  64  81 100 121 144 169 196 225 256 289
## [18] 324 361 400 441 484 529 576 625 676 729 784 841 900

Write a map() function to square a value

You might think to rewrite this function, all we do is:

> map_dbl(x, ^)
Error: unexpected '^' in "map_dbl(x, ^"

But that doesn’t work. The exponentiation operator ^ performs a function, but because it isn’t written like a traditional function map_dbl() doesn’t know how to convert this to a for loop. Instead, we need to rewrite it with another function

square <- function(a){
  a^2
}

map_dbl(x, square)
##  [1]   1   4   9  16  25  36  49  64  81 100 121 144 169 196 225 256 289
## [18] 324 361 400 441 484 529 576 625 676 729 784 841 900

Here we create a temporary function called square that takes a single argument a. That value is then squared and returned as the output. Now when we write the map function, our data to be mapped over is x and the function to be applied to it is square. We could write this even shorter as:

map_dbl(x, function(a) a^2)
##  [1]   1   4   9  16  25  36  49  64  81 100 121 144 169 196 225 256 289
## [18] 324 361 400 441 484 529 576 625 676 729 784 841 900

This creates a temporary function. It’s temporary because it only exists within the map operation, and therefore it has no name. And since it is so short, we can write on a single line without {}.

Session Info

devtools::session_info()
## Session info --------------------------------------------------------------
##  setting  value                       
##  version  R version 3.3.1 (2016-06-21)
##  system   x86_64, darwin13.4.0        
##  ui       X11                         
##  language (EN)                        
##  collate  en_US.UTF-8                 
##  tz       America/Chicago             
##  date     2016-10-13
## Packages ------------------------------------------------------------------
##  package    * version    date       source                            
##  assertthat   0.1        2013-12-06 CRAN (R 3.3.0)                    
##  codetools    0.2-14     2015-07-15 CRAN (R 3.3.1)                    
##  colorspace   1.2-6      2015-03-11 CRAN (R 3.3.0)                    
##  DBI          0.5-1      2016-09-10 CRAN (R 3.3.0)                    
##  devtools     1.12.0     2016-06-24 CRAN (R 3.3.0)                    
##  digest       0.6.10     2016-08-02 CRAN (R 3.3.0)                    
##  dplyr      * 0.5.0      2016-06-24 CRAN (R 3.3.0)                    
##  evaluate     0.9        2016-04-29 CRAN (R 3.3.0)                    
##  formatR      1.4        2016-05-09 CRAN (R 3.3.0)                    
##  ggplot2    * 2.1.0.9001 2016-10-01 Github (hadley/ggplot2@feb3ffd)   
##  gtable       0.2.0      2016-02-26 CRAN (R 3.3.0)                    
##  htmltools    0.3.5      2016-03-21 CRAN (R 3.3.0)                    
##  knitr        1.14       2016-08-13 CRAN (R 3.3.0)                    
##  lazyeval     0.2.0      2016-06-12 CRAN (R 3.3.0)                    
##  magrittr     1.5        2014-11-22 CRAN (R 3.3.0)                    
##  memoise      1.0.0      2016-01-29 CRAN (R 3.3.0)                    
##  munsell      0.4.3      2016-02-13 CRAN (R 3.3.0)                    
##  plyr         1.8.4      2016-06-08 CRAN (R 3.3.0)                    
##  purrr      * 0.2.2      2016-06-18 CRAN (R 3.3.0)                    
##  R6           2.1.3      2016-08-19 CRAN (R 3.3.0)                    
##  rcfss        0.1.0      2016-10-06 local                             
##  Rcpp         0.12.7     2016-09-05 cran (@0.12.7)                    
##  readr      * 1.0.0      2016-08-03 CRAN (R 3.3.0)                    
##  rmarkdown    1.0.9016   2016-10-08 Github (rstudio/rmarkdown@2158b9d)
##  scales       0.4.0      2016-02-26 CRAN (R 3.3.0)                    
##  stringi      1.1.1      2016-05-27 CRAN (R 3.3.0)                    
##  stringr      1.1.0      2016-08-19 cran (@1.1.0)                     
##  tibble     * 1.2        2016-08-26 cran (@1.2)                       
##  tidyr      * 0.6.0      2016-08-12 CRAN (R 3.3.0)                    
##  tidyverse  * 1.0.0      2016-09-09 CRAN (R 3.3.0)                    
##  withr        1.0.2      2016-06-20 CRAN (R 3.3.0)                    
##  yaml         2.1.13     2014-06-12 CRAN (R 3.3.0)

References