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

En anglais

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

8 réponses

  1. Merci Claire pour ce mémo sur purrr
    Si vous pouviez expliciter les lignes de code de votre exemple, ça serait super.
    Nicolas

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *