-
Notifications
You must be signed in to change notification settings - Fork 1
/
03_purrr.Rmd
128 lines (90 loc) · 3.85 KB
/
03_purrr.Rmd
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
---
title: "Touring tidyverse"
subtitle: "purrr"
output:
xaringan::moon_reader:
lib_dir: libs
nature:
highlightStyle: github
highlightLines: true
countIncrementalSlides: false
---
```{r setup, include=FALSE}
options(htmltools.dir.version = FALSE)
```
background-image: url(https://raw.githubusercontent.com/tidyverse/purrr/master/man/figures/logo.png)
background-size: 100px
background-position: 90% 6%
# purrr
is a "...complete and consistent functional programming toolkit for R". It draws inspiration from multiple languages (Haskell, Scala, Javascript, `rlist` package). From vignette:
> However, the goal of purrr is not to try and simulate a purer functional programming language in R; we don’t want to implement a second-class version of Haskell in R. The goal is to give you similar expressiveness to an FP language, while allowing you to write code that looks and works like R.
---
# Why purrr
1. API responses (JSON, XML or any list-like alternatives).
2. Make lists less `r emo::ji("ghost")`.
3. Efficient abstraction over `for` loops.
4. Putting all `*apply` functions from base R into more principled framework.
5. Gateway drug to functional programming and all the goodies to go along with it (e.g., parallel programming).
6. Split-Apply-Combine paradigm.
7. List-columns.
8. Plays nicely with pipe.
---
# Initial commit of purrr
First commit: `2014-11-30 00:33` by Hadley Wickham.
---
# Current state
1. Current version - `r packageVersion("purrr")`.
1. https://github.com/tidyverse/purrr
1. Developed by __Lionel Henry__, Hadley Wickham.
1. 1000+ commits by 62 contributors.
---
background-image: url(https://raw.githubusercontent.com/tidyverse/purrr/master/man/figures/logo.png)
background-size: 100px
background-position: 90% 6%
# purrr
Covering:
1. Working with iteration in principled and safe manner.
1. ~~Functional programming.~~
1. ~~Adverbs and mappers.~~
1. ~~Utilities for working with lists.~~
```{r purrr_api, echo = FALSE}
length(getNamespaceExports("purrr"))
```
---
# Mapping
Following slides are from the Charlotte Wickham workshop that you can download here:
<a href="https://www.dropbox.com/sh/062xjv35izc2a92/AAAnC-nzToR1rPekDZipRJSLa?dl=0">bit.ly/purrr-rstudioconf</a>
---
background-image: url(https://raw.githubusercontent.com/romatik/touring_the_tidyverse/master/img/map.png)
background-size: 100%
# map
---
background-image: url(https://raw.githubusercontent.com/romatik/touring_the_tidyverse/master/img/map2.png)
background-size: 100%
# map2
---
background-image: url(https://raw.githubusercontent.com/romatik/touring_the_tidyverse/master/img/pmap.png)
background-size: 100%
# pmap
---
background-image: url(https://raw.githubusercontent.com/romatik/touring_the_tidyverse/master/img/walk.png)
background-size: 100%
# walk
---
background-image: url(https://raw.githubusercontent.com/romatik/touring_the_tidyverse/master/img/invoke_map.png)
background-size: 100%
# ~~invoke_map~~ -> rlang::exec
---
```{r, echo = FALSE}
countdown::countdown_fullscreen(minutes = 3, update_every = 30,
padding = "20%", margin = "5%",
font_size = "8em", line_height = "1.25")
````
---
# Resources
1. `purrr` tutorial by Jenny Brian - https://jennybc.github.io/purrr-tutorial/index.html
1. RStudio cheatsheet - https://github.com/rstudio/cheatsheets/blob/master/purrr.pdf
1. Parallel processing with `purrr` and `future` - https://www.jottr.org/2017/06/05/many-faced-future/ (also see https://github.com/DavisVaughan/furrr)
1. `purrr` workshop by Charlotte Wickham - https://www.dropbox.com/sh/062xjv35izc2a92/AAAnC-nzToR1rPekDZipRJSLa?dl=0
1. "Master the `tidyverse`" by Garett Grolemund - https://github.com/rstudio-education/master-the-tidyverse/.
1. `purrr::partial` example by Tyler Bradly - https://tbradley1013.github.io/2018/10/01/calculating-quantiles-for-groups-with-dplyr-summarize-and-purrr-partial/