- Le blog participatif de bioinformatique francophone depuis 2012 -

De la procrastination dans l'R

Connaissances requises

  1. Connais­sances basiques en RSi vous ne faites pas la dif­fé­rence entre un test exact de Fisher et le test du Chi‑2, cela ne devrait pas poser de pro­blème.
  2. Euh, bah c'est tout !

Introduction

Si l'on s'en réfère à la défi­ni­tion :

Un infor­ma­ti­cien, et a for­tio­ri un bio­in­for­ma­ti­cien, fera tout pour mettre en œuvre des stra­té­gies lui per­met­tant d'automatiser les tâches répé­ti­tives qui lui incombe.

Plu­sieurs avan­tages à cela, i/​ ral­lon­ger les pauses café, ii/​ pro­fi­ter du temps gagné pour regar­der la guerre des étoiles direc­te­ment sur le ter­mi­nal :

Je vous ras­sure, le but ici n'est pas d'apprendre à réa­li­ser des films en carac­tères ASCII, chose très fas­ti­dieuse et dénuée de toute rela­tion avec la bio­in­for­ma­tique.

The General Problem - xkcd
The Gene­ral Pro­blemxkcd

Nous allons cepen­dant voir com­ment à l'aide d'une petite dose de Mark­down et de quelques com­mandes R, il va être pos­sible de géné­rer de façon auto­ma­tique des beaux rap­ports d'analyses de don­nées. Cela va nous per­mettre de réa­li­ser des ana­lyses repro­duc­tibles et réuti­li­sables (par exemple, sur de nou­veaux jeux de don­nées).

Préparation

Avant de com­men­cer la pra­tique, quelques petites pré­pa­ra­tions s'imposent.

Étape n°1, ins­tal­ler le package magique : Rmark­down (qui est en fait une sur­couche de kni­tr et pan­doc)

Ce petit bijou de tech­no­lo­gie sera notre fidèle allié dans la bataille contre les forces du mal des acti­vi­tés répé­ti­tives.

Étape n°2, créer un nou­veau fichier et l'ouvrir dans l'éditeur de texte de votre choix. On ne va pas entrer dans le débat, mais Vi est quand même "le meilleur édi­teur du monde" sur­tout lorsqu'il est épau­lé par le plu­gin vim-r-plu­gin qui le trans­forme en véri­table IDE pour R. Les moins bar­bus pré­fé­re­ront uti­li­ser RStu­dio qui intègre par­fai­te­ment la rédac­tion des docu­ments Rmark­down.

C'est dans ce fichier que nous allons rédi­ger notre rap­port d'analyse au for­mat Mark­down. Pour ceux qui ne sont pas fami­lier avec Mark­down, c'est un lan­gage de des­crip­tion syn­taxique qui per­met de très sim­ple­ment struc­tu­rer un docu­ment, avec des titres, des liens, des images, des listes, du texte en gras/​italique, des tableaux… C'est un peu comme du LaTeX ou du HTML mais sans les balises com­plexes et les for­mules com­pli­quées. C'est sim­ple­ment du texte brut facile à lire et à écrire.

Dans ce docu­ment nous allons pou­voir écrire le texte de notre rap­port d'analyse et l'entremêler avec des com­mandes R. Ces der­nières seront uni­que­ment éva­luées à la géné­ra­tion de façon à insé­rer les résul­tats pro­duits dans le docu­ment final. L'objectif étant d'écrire un rap­port pré-for­ma­té qui va pou­voir être ré-géné­ré avec des don­nées dif­fé­rentes. Pour ceux qui parlent le Python cou­ram­ment, il existe une solu­tion simi­laire pour ce lan­gage : iPy­thon Note­book.

Plu­tôt qu'un long dis­cours, pas­sons à la pra­tique.

La pratique !

Nous allons tout d'abord intro­duire au début de notre docu­ment quelques méta­don­nées au for­mat YAML afin d'ajouter un titre bien assu­mé, le nom de son altesse, une date actuelle et quelques réglages sur le for­ma­tage du rap­port qui sera pro­duit. Ici, nous allons géné­rer un PDF (com­pi­lé à l'aide d'une dis­tri­bu­tion LaTeX) avec une table des matières. Bien évi­de­ment, d'autres for­mats de sor­tie sont dis­po­nibles comme HTML, doc/​docx (Word) ou même sous forme de pré­sen­ta­tion avec Bea­mer Latex ou io-slides. Ces deux der­niers sont des tem­plates qui per­mettent de géné­rer des pré­sen­ta­tions en PDF (Bea­mer Latex) ou en HTML (io-slides). Il existe éga­le­ment un tas d'options pour per­son­na­li­ser l'aspect final de votre rap­port.

Main­te­nant, nous allons ajou­ter une pre­mière sec­tion à ce docu­ment afin de van­ter les magni­fiques ana­lyses qui vont suivre :

Dans ce **magni­fique** docu­ment, nous allons ana­ly­ser un ensemble d'annotations récu­pé­rées sur la base de don­nées *Ensem­bl*.

Dans ce rap­port nous allons décou­vrir :
- un magni­fique gra­phique
- un excep­tion­nel tableau
- et un score de cor­ré­la­tion de Pear­son.

Dans le for­ma­tage Mark­down, le carac­tère # per­met d'introduire un titre de niveau 1, deux dièses auraient intro­duit un titre de niveau 2, etc. Les doubles ** qui entourent un mot per­mettent de mettre le texte en gras et les simples * cor­res­pondent à l'italique. Enfin une liste à puces est sim­ple­ment repré­sen­tée par des tirets. Pour plus d'informations sur ce lan­gage, direc­tion la page offi­cielle.

Avant de com­men­cer les choses sérieuses, l'analyse que nous allons mener va se baser sur l'ensemble des anno­ta­tions (au for­mat GTF) du C. ele­gans récu­pé­rées ici sur Ensem­bl.

Afin d'inclure du code R nous allons insé­rer des R chunks :

Un R chunk est un couple de balises entre les­quelles nous allons pla­cer du code R. Ce der­nier ne sera inter­pré­té qu'à la com­pi­la­tion du docu­ment et le résul­tat pro­duit par le code (plot, tableau, variable) sera insé­ré dans le docu­ment en place du chunk.

Voi­la un exemple de R chunk qui affiche Hel­lo world :

Il existe éga­le­ment la ver­sion "inline" du R chunk, qui per­met d'intégrer un résul­tat numé­rique direc­te­ment dans une phrase :

Un R chunk ne pro­duit pas for­cé­ment de résul­tats visibles. Cer­tain chunk peuvent uni­que­ment per­mettre d'exécuter du code R dit "silen­cieux".

markdown chunk with preview in RStudio
Un docu­ment Rmark­down et sa pré­vi­sua­li­sa­tion dan RStu­dio.

Un cas cou­rant d'utilisation de chunk silen­cieux cor­res­pond au char­ge­ment de biblio­thèques et/​ou de fichiers, comme ce sera le cas de notre pre­mier R chunk :

Remar­quez la pré­sence de l'option echo=FALSE entre les acco­lades qui per­met d'indiquer à kni­tr de ne pas affi­cher les lignes de code dans le docu­ment final.

Trois com­mandes sont pré­sentes dans ce chunk, la pre­mière per­met de char­ger la biblio­thèque ggplot2 qui va s'occuper de géné­rer nos beaux gra­phiques, la seconde per­met d'importer notre fichier d'annotation dans un Data­frame (nom don­né à un tableau à double entrée dans R) en se limi­tant aux 1000 pre­mières lignes car on n'a pas toute la nuit ! Enfin, la troi­sième com­mande per­met de défi­nir le nom des colonnes du Data­frame.

Main­te­nant ces ini­tia­li­sa­tions faites, nous allons pou­voir démar­rer notre ana­lyse ! Il est impor­tant de noter que même si les chunks sont phy­si­que­ment sépa­rés les uns des autres, ils sont en fait exé­cu­tés les uns à la suite des autres dans une même ses­sion R. Cela signi­fie que les variables décla­rées dans un chunk (comme ici df ), sont uti­li­sables dans tout le reste du docu­ment.

Nous pou­vons main­te­nant inté­grer un pre­mier gra­phique sur la fré­quence des dif­fé­rents types d'annotations (gène, exon, trans­crit) :

Si vous sou­hai­tez en savoir plus sur ggplot, leur site web déborde d'exemples.

À la suite de ce gra­phique nous allons inté­grer un tableau for­ma­té cor­res­pon­dant à un extrait des anno­ta­tions conte­nues dans notre Data­frame :

Afin de géné­rer notre tableau nous avons uti­li­sé la fonc­tion kable du package kni­tr qui per­met de trans­for­mer notre Data­frame en un tableau for­ma­té à la sauce Mark­down. Il a éga­le­ment été néces­saire d'ajouter l'option results='asis' pour spé­ci­fier à Rmark­down de n'appliquer aucun post-trai­te­ment sur le résul­tat pro­duit par ce chunk.

Enfin nous allons finir cette belle ana­lyse avec une petite mesure de cor­ré­la­tion (avec la méthode de Pear­son) entre les posi­tions de début et de fin des anno­ta­tions, qui, comme on pour­rait l'attendre est très bonne.

Main­te­nant, il ne nous reste plus qu'à géné­rer le docu­ment final à l'aide de la com­mande rmarkdown::render("my-first-report.Rmd") et d'admirer le résul­tat !
Pour ceux qui tra­vaillent sous RStu­dio un bou­ton "knit PDF" est direc­te­ment inté­gré à l'interface gra­phique.

Conclusion

Si vous êtes arri­vés vivants jusqu'ici, vous avez main­te­nant toutes les cartes en main pour créer de magni­fiques rap­ports d'analyses repro­duc­tibles. Si vous sou­hai­tez en savoir plus, un site regrou­pant plein de res­sources a été mis en place par/​pour la com­mu­nau­té. Vous y appren­drez entre autres à écrire des chunks réuti­li­sables, à inté­grer des cita­tions et à géné­rer des rap­ports HTML inter­ac­tifs.

Pour ceux qui sou­haitent aller plus loin, un MOOC (cours en ligne) sur le thème de la "Recherche repro­duc­tible" et se basant sur Rmark­down vient de com­men­cer sur Cour­se­ra (jusqu'au 1er juin). Ce cours est dis­pen­sé par l'université de Johns Hop­kins et devrait vous per­mettre d'approfondir le sujet avec un cours de grande qua­li­té.

Ressources

Un grand mer­ci à toute l'équipe de Bioin­fo-fr et en par­ti­cu­lier à nahoy, hed­jour, Yoann, m4rsu, Nico M. et Nol­wenn pour leur relec­ture, leurs conseils et leur aide pour la publi­ca­tion de mon pre­mier article sur Bioin­fo-fr.

Vous avez aimé ? Dites-le nous !

Moyenne : 0 /​ 5. Nb de votes : 0

Pas encore de vote pour cet article.

Partagez cet article :




Commentaires

Laisser un commentaire