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)
5 Comments
Gabi Huiber
Je suis dans l’equipe Dory aussi, et mon aide-mémoire est StackOverflow. Mais maintenant je pense sérieusement à imprimer quelque cheat sheets moi aussi.
lvaudor
🙂
Oui c'est vrai, StackOverflow ça sert bien! Et de fait, en tant que membre de la team Dory, je retombe souvent sur un même problème, qui me mène aux mêmes questions StackOverflow, à partir des mêmes requêtes Google! :-/
Maëlle
Je relis ton super article en prépa d'une présentation sur être un utilisateur de R résilient ;o) Finalement, ce que je conseillerais bien à mon public (et à moi même ahahah), c'est de créer ses propres aide-mémoires ! Cela me rappelle cet article de Suzan Baert https://suzan.rbind.io/2018/03/reflections-4-months-of-github/ dans lequel elle parle de https://github.com/suzanbaert/Resources_and_Bookmarks/blob/master/GIT_01_Basics.md et d'ailleurs le repo entier est constitué de mémentos !
lvaudor
Coucou,
Ah super merci pour les liens! Héhé en plus justement il faut que je gagne en pratique et en confiance sur git/github parce que j'ai encore des coups de flip, du type "Et si je faisais une grosse boulette et pourrissais le repo d'autres personnes que moi-même?". (Pour l'instant ça n'est jamais arrivé, mais bon, je pense que c'est un peu comme la peur d'oublier de s'habiller pour aller au travail, c'est ancré profondément dans notre subconscient 😉 )...
Marc S.
Moi perso, si je me souviens avoir utilisé une fonction dans un de mes scripts, je recherche le nom avec notepad++ dans mes fichiers en filtrant avec *.R, ça marche pas mal.
Super blog 😉