Trucs pour LaTeX & R

Un travail doit être reproductible.

mardi 27 novembre 2018 par Philippe MICHEL

Vous réouvrez un travail réalisé il y a quelques semaines, vous refaites un calcul & ne trouvez plus le même résultat. Une situation qui peut paraître bizarre mais qui demeure très fréquente. Où on vous signale une erreur, mais où ? Comment la retrouver sans refaire tout le travail ?
Pour en finir avec l’introduction chaque langage a des outils adaptés, je ne parlerai ici que de R & de LaTeX, bien entendu.

Tout travail scientifique doit pouvoir être reproduit. c’est une base. Dans un article le chapitre « Matériel & Méthode » doit permettre au lecteur de reproduire la manip décrite. c’est pareil pour tout travail que vous réalisez même s’il n’y a que vous qui devrez, peut-être, le refaire. Tout ce qui suit va vous paraître complexe & contraignant mais, à l’usage, que de temps gagné ! De plus le document généré, un peu lourd & indigeste peut néanmoins facilement servir de base pour rédiger le rapport final qui sera remis au client/collègue.

Les outils

Il existe des outils pour toutes les situations, tous les langages. je vais me limiter à ce que je connais , à savoir R. Et le choix dépend de l’IDE utilisé :

  • Pour RStudio ce sera Rmarkdown, un dérivé de markdown qui permet d’y incorporer du code (R mais aussi Python etc.). très bien intégré, simple d’emploi.
  • Pour les vrais, les poilus qui se déforment les doigts sur Emacs, il y a org-mode votre vie en texte brut. je ne parlerai que de ce dernier.
  • Sinon il y a toujours knitr qui sort du LaTeX mais plus lourd que les deux précédents.

Les principes

L’idée est de garder tout son code, (le bon, celui qui marche), les commentaires & les résultats sur un document unique qui se génère tout seul, enfin presque.

Configuration

Vous avez donc Emacs avec le package org-mode installé. Il va falloir configurer tout ça pour que org reconnaisse du code R (ou autre) & l’interprète. Pour la syntaxe org-mode voir le site officiel. On rajoute donc dans son .emacs :

  1. (setq org-confirm-babel-evaluate nil) ;; Do not ask for confirmation all the time!!
  2.  
  3.   (org-babel-do-load-languages
  4.    'org-babel-load-languages
  5.    '(
  6.      (shell . t)
  7.      (python . t)
  8.      (R . t)
  9.      (org . t)
  10.      (makefile . t)
  11.      ))
  12.  
  13. (add-to-list 'org-structure-template-alist
  14.         '("r" "#+begin_src R :results output :session *R* :exports both\n\n#+end_src" "<src lang=\"R\">\n\n</src>"))
  15.  
  16. (add-to-list 'org-structure-template-alist
  17.         '("R" "#+begin_src R :results output graphics :file (org-babel-temp-file \"figure\" \".png\") :exports both :width 600 :height 400 :session *R* \n\n#+end_src" "<src lang=\"R\">\n\n</src>"))
  18.  
  19. (add-to-list 'org-structure-template-alist
  20.         '("RR" "#+begin_src R :results output graphics :file  (org-babel-temp-file (concat (file-name-directory (or load-file-name buffer-file-name)) \"figure-\") \".png\") :exports both :width 600 :height 400 :session *R* \n\n#+end_src" "<src lang=\"R\">\n\n</src>"))
  21.  
  22. (global-set-key (kbd "C-c S-t") 'org-babel-execute-subtree)
  23.  
  24. (add-hook 'org-babel-after-execute-hook 'org-display-inline-images)
  25. (add-hook 'org-mode-hook 'org-display-inline-images)
  26. (add-hook 'org-mode-hook 'org-babel-result-hide-all)
  27.  
  28. (add-hook 'after-init-hook 'global-company-mode)

Télécharger

On crée un document org-mode : C-x C-f exemple.org.
Dans ce document on va insérer des zones de code (ou chunck par <r Tab qui va créer :

#+begin_src R :results output :session *R* :exports both

#+end_src

On écrit son code R dans ce chunck, le texte explicatif autour & on lance la sortie en html via C-c C-e h o On peut aussi exporter en LaTeX ou en texte brut mais en cours de travail l’export html est le plus souple. l’export LaTeX est parfois capricieux, digère mal les erreurs. On aura donc une page web avec le bla-bla, le code & les résultats.

Donc on écrit son code, on fait des erreurs, on corrige, on recommence & quand une portion est ok, on la copie dans sa page org. Un chunck doit être court, ne faire qu’une chose. Et le premier, en haut de page, doit ouvrir les packages utiles &, petit conseil, commencer par un sessionInfo() qui va indiquer le système, les versions utilisées etc.


Accueil | Contact | Plan du site | | Statistiques du site | Visiteurs : 19 / 131685

Suivre la vie du site fr  Suivre la vie du site Généralités   ?    |    titre sites syndiques OPML   ?

Site réalisé avec SPIP 3.2.1 + AHUNTSIC

Creative Commons License