Eh bien voilà, tout est parti de là:

Je me reconnais doublement dans ce tweet, d'une part parce que moi aussi j'ai du mal avec les fonctions gather() et spread() de tidyr (et que je dois consulter la cheatsheet à chaque fois que je les utilise), et d'autre part parce qu'à moi aussi, on me pose souvent la question dans le cadre des formations R que je fais: "Mais comment on fait pour se rappeler tout ça??".

Alors, deux possibilités:

  • Possibilité n°1: On est une sorte de badass à la mémoire photographique, style Lisbeth Salander. Auquel cas, on se rappelle de tout, et on maîtrise grave, un point c'est tout.

Si vous êtes dans ce cas, félicitations! Vous n'avez nullement besoin de lire la suite de ce post.

  • Possibilité n°2: Vous avez une capacité de mémorisation limitée, voire très limitée, plutôt dans le genre de Dory.

Bon. Personnellement, je me reconnais plutôt dans le deuxième profil, comme vous peut-être, puisque vous êtes encore en train de me lire...

Et ça veut dire que ben, en fait, on ne se rappelle pas tout, loin s'en faut. En réalité, le mieux que l'on puisse espérer c'est sans doute:

  • se rappeler les choses dont on se sert tout le temps
  • retrouver très rapidement les choses dont on se sert souvent
  • retrouver rapidement les choses dont on se sert occasionnellement
  • savoir rechercher efficacement les choses dont on se sert rarement

Pour y arriver, il existe évidemment tout un tas de stratégies différentes. Or parler de la manière dont les gens travaillent In Real Life ça peut sembler trivial mais c'est en fait hyper important quand on essaie de se faire l'apôtre de R. (Et là, j'ai très envie de partir en digression sur la notion de "workflow" et sur tous les outils qui permettent de l'améliorer: RStudio, le tidyverse, et tutti quanti, mais je vais me retenir.)

Du coup, je vais me contenter ici de décrire mes quelques petites techniques de mémorisation/remémorisation... Elles sont parfois "triviales" (et sans doute imparfaites), mais peut-être trouverez-vous intéressant de les comparer aux vôtres et à cette occasion de réfléchir à votre workflow.

D'ailleurs, n'hésitez pas à réagir et à enrichir le post avec vos stratégies personnelles en ajoutant des commentaires ci-dessous!!

Je sais de quelle fonction j'ai besoin, mais je ne sais plus trop comment l'utiliser...

On est ici typiquement dans le cas où la documentation associée à la fonction doit permettre de s'en sortir...

Un petit

?fonction

ou

help(fonction)

Filez vers la section "Arguments" si ce qui met votre mémoire en défaut est

  • l'ordre des arguments,
  • la nature des arguments,
  • l'existence potentielle d'un argument qui ferait le petit quelque chose en plus qui vous intéresse

Si vous êtes en quête d'un rafraîchissement de mémoire encore plus élémentaire que ça (par exemple vous cherchez à vous rappeler quel genre d'objet on peut passer en argument principal à une fonction), vous pouvez essayer de filer directement vers la section Examples...

Je sais de quel package j'ai besoin, mais je ne sais plus trop quelle est la fonction qui m'intéresse...

Cas n°1: le package fait l'objet d'une cheatsheet...

Si le package en question fait l'objet d'une antisèche, ou cheatsheet, alors, hourra! cela devrait être assez simple de remettre la main sur la fonction qui m'intéresse...

En pratique, j'ai imprimé les cheatsheets associées à l'ensemble des packages que j'utilise régulièrement, et je les ajoute à mon petit présentoir à cheatsheets (i.e. un porte-documents punaisé au mur):

(et hop, en exclusivité mondiale, une photo du mur à droite de mon bureau)

A l'heure actuelle dans mon présentoir, j'ai les cheatsheets relatives à dplyr et tidyr, ggplot2, Rmarkdown,stringr et expressions régulières, purrr, et Shiny. C'est assez difficile à quantifier, mais je dirais qu'il est rare qu'un jour ne s'écoule sans que je consulte mon "présentoir à cheatsheets"...

D'ailleurs, pour voir une liste exhaustive des cheatsheets Rstudio, c'est ici...

Cas n°2 : le package fait l'objet d'une ou plusieurs vignettes

Personnellement, pour apprendre, comme pour retrouver vite fait ce que fait un package, j'aime bien jeter un oeil aux vignettes (si elles existent).

Par exemple ici, la vignette associée au package tidytext.

Le principe d'une vignette, c'est de fournir un aperçu de ce que fait le package, en mettant en avant ses principales fonctions, et la manière dont elles s'articulent entre elles.

Ainsi, la vignette est le format qu'il vous faut si

  • vous avez simplement besoin d'un petit rafraîchissement de mémoire sur les fonctionnalités d'un package,
  • ne voulez pas risquer d'être noyé dans un tas de détails techniques inutiles à votre usage

Les packages R récents semblent faire de plus en plus souvent l'objet d'une vignette, et c'est tant mieux! car le nombre de package ne fait qu'augmenter et tout moyen pour s'y retrouver est bon à prendre :-).

Cas n°3 le package n'est l'objet ni d'une cheatsheet ni d'une vignette

Si le package dont je sais avoir besoin n'est l'objet ni d'une cheatsheet, ni d'une vignette, alors là je n'ai malheureusement plus de méthode standard pour me rafraîchir la mémoire.

Solution n°1: Je peux essayer de me rafraîchir la mémoire chez les autres...

Eh oui, car, heureusement, je ne suis pas en train de faire un devoir sur table où l'usage du smartphone serait interdit... L'internet est là pour voler à mon secours...

De fait, une petite recherche Google (ou Bing, ou Duck-duck go ou n'importe quel moteur de recherche) sur le nom du package (+ éventuellement "Rstat" ou "CRAN") devrait vous donner quelques résultats intéressants.

Dans ce contexte, ce que j'appelle "intéressant", c'est un document qui vous permettra de vous remémorer en un coup d'oeil les fonctions principales du package et la façon dont on les appelle... et non le pdf qui liste l'ensemble des fonctions d'un package et compile leur documentation, car ce document ne présente aucune hiérarchisation des fonctions, que ce soit en importance ou en ordre d'appel...

Certains packages font ainsi l'objet de billets de blog, ou de supports pédagogiques assez exhaustifs. Par exemple, le package FactoMineR relatif aux méthodes factorielles a un site associé qui liste tout un tas de ressources. Ce genre de site, c'est une mine d'or quand on apprend à utiliser un package et qu'on cherche à comprendre la méthode associée. C'est un peu trop riche, en revanche, quand on a juste besoin de se remémorer les commandes ad hoc. Si je suis sûre de pouvoir y retrouver toutes les infos dont j'ai besoin, je ne suis en revanche pas sûre de retrouver ces infos rapidement... (En l'occurrence, un billet de blog peut être plus intéressant dans ce contexte, car plus concis...)

On entre là, pour moi, dans une "zone grise" où il n'y a pas de "court document de référence", et où il va, de fait, falloir explorer, arbitrer, parcourir un certain nombre de sites/blogs/vidéos avant de trouver le support qui convient à notre besoin.

Dans l'idéal, je pense qu'une solution "efficace" serait d'avoir des marque-pages très bien organisés sur nos navigateurs web pour remettre la main rapidement sur nos aide-mémoires favoris...

Pour le coup, je suis moi-même très peu efficace et fonctionne à chaque fois par des recherches Google que j'affine au coup par coup (bouh!) en fonction de mes types de supports et blogs préférés... (Et vous, vous faites comment??)

Je peux essayer de me rafraîchir la mémoire en parcourant mes propres projets

Si j'ai déjà utilisé le package pouetpouet par le passé, alors rechercher l'ensemble des documents qui comprennent library(pouetpouet) sur mon PC me permet d'aller me rafraîchir la mémoire assez rapidement dans mes scripts ou dans mes documents .Rmd et les .html/.docx/.pdf associés.

(Si je me rappelle avoir déjà fait ce genre de chose, mais je ne sais plus quel est le package et/ou la fonction qui permettent de le faire, je suis à peu près dans le même cas de figure sauf qu'il va d'abord falloir que je me raccroche aux branches en essayant de me rappeler a minima le contexte dans lequel j'ai pu faire ce genre de choses... et parcourir l'ensemble des dossiers potentiellement concernés!...)

Comme mes scripts sont bien entendu toujours très bien commentés et mes documents Rmd toujours très bien expliqués, je retrouve les infos dont j'ai besoin en un quart de seconde ;-).

Plus sérieusement, on est là dans le cas d'école de "Voilà à quoi ça sert de travailler en pensant à son futur soi-même"... Si on a été gentil avec son futur soi-même par le passé, le présent soi-même est reconnaissant du temps gagné! (Ceci n'est pas une citation de Jean-Claude Van Damme, mais ça y ressemble tellement que ça mérite de l'italique et un gif. Hop)