Liste de ressources pour le package purrr
Très récemment, je discutais avec une étudiante, qui voulait progresser dans la programmation R, de l’intérêt du package `purrr` pour optimiser ses codes. En réalité, je n’ai pas pu aller très loin dans mes explications, et mes démonstrations, parce que je maîtrise pas du tout ce package !
Cette conversation a été un peu frustrante, mais finalement salutaire parce qu’elle m’a décidé à enfin franchir le pas, et à commencer à apprendre à utiliser purrr
. C’est dans cette optique que j’ai fait une petite recherche des ressources qui me paraissent particulièrement intéressantes pour débuter cet apprentissage, disponibles gratuitement, en français et en anglais ! C’est cette première liste que je partage dans cet article. Mais avant de passer à la liste, voyons ce qu’est ce package purrr, et un exemple d’utilisation.
Mais c'est quoi ce package purrr ?
Pour celles et ceux qui ne le connaissent pas, `purrr` est un package dédié à la programmation fonctionnelle. Ses fonctions principales sont les fonctions `map()` (`map()`, `map_chr()`, `map_dbl()`, `map_dfr()`, etc…), elles permettent d’appliquer une même fonction (ou une même
série de fonctions) à chaque élément d’un ensemble (les colonnes d’un data frame, ou les éléments d’une list par exemple). En gros, ces fonctions `map()` permettent de remplacer les boucles `for()` avantageusement en termes de nombre de lignes de code et de temps de calcul (parce que ces fonctions reposent sur la récursivité).
Certains vont me dire : ce n’est pas ce que faisaient déjà les fonctions `apply()` (`lapply()`, `sapply()`, `tapply()`) ?
Si !
Mais, il parait que dans certains contextes leurs sorties sont imprévisibles (voir ici pour un exemple avec `sapply()`. De plus, les fonctions `map()` sont tidyverse compatibles. On peut donc les utiliser à la suite d’autres commandes en utilisant le pipe `%>%`, et ça c’est un gros avantage !
Pour une bonne introduction à la programmation fonctionnelle, et aux différences entre les boucles `for()`, les fonctions `apply()` et les fonctions `map()`, je vous recommande de lire la deuxième partie de l‘article « Learning Functional Programming & purrr » de Paul van der Laken
Pour ce qui concerne son chargement dans R, le package purrr
peut être chargé avec le package tidyverse
:
library(tidyverse)
Ou de façon spécifique, comme ceci :
library(purrr)
Exemple
Voici un exemple de code, qui utilise les fonctions map()
et map_dfr()
, et qui permet de réaliser, en 7 lignes, toutes les régressions linéaire simples d’une variable réponse en fonction de chacune des variables explicatives , et, à l'aide de la fonction
tidy() du package
broom`, de récupérer les informations suivantes :
- le nom de chaque variable explicative
- le coefficient de la pente
- l’erreur standard de la pente
- la statistique du test d’égalité à 0 de la pente
- la p-value du test
Et de classer les résultats par p-values croissantes !
Ici le code est appliqué au données mtcars
qui sont directement disponibles dans R (il n’est pas nécessaire de les charger).
RLS_table <- mtcars %>%
dplyr::select(-mpg) %>% # enleve la var réponse pour ne conserver que les var explicatives
map(~lm(mtcars$mpg ~ .x, data = mtcars)) %>%
map_dfr(~ broom::tidy(.), .id = 'source') %>%
filter(term==".x") %>%
dplyr::select(-term) %>%
arrange(p.value)
RLS_table
## # A tibble: 10 x 5
## source estimate std.error statistic p.value
## <chr> <dbl> <dbl> <dbl> <dbl>
## 1 wt -5.34 0.559 -9.56 1.29e-10
## 2 cyl -2.88 0.322 -8.92 6.11e-10
## 3 disp -0.0412 0.00471 -8.75 9.38e-10
## 4 hp -0.0682 0.0101 -6.74 1.79e- 7
## 5 drat 7.68 1.51 5.10 1.78e- 5
## 6 vs 7.94 1.63 4.86 3.42e- 5
## 7 am 7.24 1.76 4.11 2.85e- 4
## 8 carb -2.06 0.569 -3.62 1.08e- 3
## 9 gear 3.92 1.31 3.00 5.40e- 3
## 10 qsec 1.41 0.559 2.53 1.71e- 2
C’est assez fantastique, non ?
Les ressources
La cheat sheet
Le package purrr
dispose d’une cheat sheet (Apply Functions Cheat) , téléchargeable ici.
En français
- Le tutoriel Itération de fonctions avec purrr, de Lise Vaudor
- Un article d’introduction par ThinkR : Un code qui ronronne avec purrr
En anglais
- purrr tutorial by Charlotte Wickham
- Intro to purrr by Emorie D Beck
- Learning Functional Programming & purrr de Paul ven der Laken
- Data wrangling and model fitting using purrr de Daniel Ovando.
- La série de posts « A Crazy Little Thing Called {purrr} » par Colin Fay :
- A Crazy Little Thing Called {purrr} – Part 1 : Web Mining Back from Budapest
- A Crazy Little Thing Called {purrr} – Part 2 : Text Wrangling
- A Crazy Little Thing Called {purrr} – Part 3 : Setting NA
- A Crazy Little Thing Called {purrr} – Part 4: mappers
- A Crazy Little Thing Called {purrr} – Part 5: code optimization
- A Crazy Little Thing Called {purrr} – Part 6 : doing statistics
- purrr tutorial by Jenny Bryan :
- Purrr – tips and tricks
- Import a Directory of CSV Files at Once Using {purrr} and {readr}
Conclusion
Si comme moi, vous débutez dans l’utilisation de ce package purrr, j’espère que cette liste de ressources vous sera utile !
Pour ceux qui ont déjà franchis le pas, dites moi en commentaire ce qui vous a posé le plus de difficultés, et aujourd’hui quelle est, ou quelles sont les fonctions qui vous utilisez le plus souvent ? Si vous connaissez d’autres ressources particulièrement intéressantes ou pédagogiques, n’hésitez pas à me les indiquer.
Si cet article vous a plu, ou vous a été utile, et si vous le souhaitez, vous pouvez soutenir ce blog en faisant un don sur sa page Tipeee 🙏
Image par Gerhild Klinkow de Pixabay
Bonjour Claire Della Vedova pour ce travail ingénieux et formatif. Merci pour tout ce que tu fais
Merci Claire pour ce mémo sur purrr
Si vous pouviez expliciter les lignes de code de votre exemple, ça serait super.
Nicolas
Bonjour Simon,
dés que je serai plus à l’aise avec ces fonctions map(), c’est promis !
Merci bien Claire de ce travail fort utile qui nous épargne les tracasseries de codage.
Bonjour Claire
Félicitations pour votre esprit d’ouverture et merci pour cet article.
Merci Claire pour ce nouvel article. Très intéressant
BONJOUR CLAIRE , MERCI POUR VOS COURS MAIS J’AI DU MAL A LES TÉLÉCHARGER.