Utilisation avancée de R avec RStudio

UTILISATION AVANCÉE
DE R AVEC R STUDIO
Eric Marcon
21/09/2014
1
Utilisation avancée de R avec RStudio
Ce document évolue avec les avancées de la recherche. Il est susceptible de contenir des erreurs ou des inexactitudes qui sont corrigées dès que l’auteur en a
connaissance.
Les opinions émises par les auteurs sont personnelles et n’engagent pas l’UMR
EcoFoG ou ses tutelles.
UTILISATION AVANCÉE DE R AVEC
RSTUDIO
Package R...............................................19
Sommaire
Création d’un package ......................... 19
Structure d’un package ........................ 19
Objectifs .................................................... 5
Fichier DES CRIP TION
20
Projet R ..................................................... 7
Fichier NAMESPA CE
20
Fichier NEWS
21
Logiciels nécessaires ............................. 7
R
7
R Tools
7
R Studio
7
Packages R
8
LaTeX
8
Options de RStudio ................................ 8
Options générales
8
Création d’un projet ................................ 9
Documentation rapide .......................... 10
Portfolio
10
Rapport Markdown
12
Rapport Sweave
13
Rapports knitr
16
Répertoire Man : description du package21
Répertoire R : code des fonctions
23
Code des fonctions C
23
Répertoire man : aide des fonctions
24
Répertoire data : données
26
Répertoire man : description des données
26
Fichier inst/CITA TION
27
Vignettes
28
Répertoire .#Extra
29
Compilation ........................................... 29
Publication ............................................ 30
Conclusion ..............................................31
3
OBJECTIFS
L’objectif de ce document est de montrer comment utiliser efficacement R et RStudio pour la
production de code et sa documentation, dans le cadre d’un projet R (au sens de RStudio).
La création d’un package est traitée dans un deuxième temps comme un projet particulier.
Les prérequis sont :
●
●
●
●
La connaissance de R, la maîtrise de son fonctionnement courant ; syntaxe, création de fonctions, scripts.
La connaissance de l’utilisation basique de RStudio : organisation des fenêtres, installation de
packages, exécution de code, création de figures.
La connaissance de base de LaTeX pour la documentation avec Sweave ou knitr : syntaxe,
création d’un document avec une bibliographie.
La connaissance de base du langage C pour l’utilisation de code C++ dans les projets.
5
PROJET R
Logiciels nécessaires
R
R1 doit être installé en version supérieure à 3.0. Utiliser la version 64 bits si le système
d’exploitation de l’ordinateur le permet.
Après l’installation, modifier les droits du dossier library de R :
Autoriser la modification aux utilisateurs de l’ordinateur.
Les packages pourront ensuite être installés dans le dossier du programme (et mutualisé entre les
utilisateurs de l’ordinateur), sans nécessiter de lancer R en tant qu’administrateur.
R Tools
Les outils de développement de R2 doivent être installés en version correspondant à celle de R
pour permettre la compilation du code C++.
R Studio
Installer RStudio 3 Desktop en version supérieure à 0.98.
1
2
http://cran.r-project.org/
http://cran.rstudio.com/bin/windows/Rtools/
7
Utilisation avancée de R avec RStudio
Packages R
Installer les packages :
•
•
knitr pour la documentation.
Rcpp pour l’intégration de code C++.
LaTeX
Une chaîne de production LaTeX doit être installée sur le poste de travail pour l’utilisation de
Sweave dans le but de documenter les packages principalement. MiKTeX 4 est une solution performante pour Windows.
Options de RStudio
Les options importantes de RStudio doivent être fixées avant de commencer à travailler en utilisant le menu Tools / Global Options.
Options générales
R est détecté automatiquement.
3
4
https://www.rstudio.com/
http://miktex.org/
8
Projet R
Le dossier de travail par défaut est placé dans le répertoire personnel de l’utilisateur (noté ~),
dans un sous dossier R.
L’encodage par défaut des fichiers doit être UTF-8 pour permettre l’utilisation des caractères
spéciaux (accents notamment).
Création d’un projet
Lancer RStudio et utiliser le menu File / New Project, puis New Directory/Empty Project. Sélectionner le dossier (existant) dans lequel le projet sera créé, et le nom du projet (qui sera celui du
dossier créé) :
Un projet est un répertoire qui contiendra les fichiers (code, données,…) et un fichier de paramètres Projet RStudio.Rproj qui contient les options du projet.
Le projet peut être ouvert à partir du fichier .Rproj ou en
utilisant le menu Projets qui se trouve en haut à droite de
la fenêtre principale de RStudio :
Quand le projet est fermé, l’environnement de R est sauvegardé (après confirmation, selon les options du projet)
comme son historique dans les fichiers .RData et
.Rhistory.
Quand
le
projet
est
ouvert,
l’environnement et l’historique sont restaurés.
Les options du projet sont par défaut héritées des options
globales. Elles peuvent être modifiées avec le menu Tools
/ Projet options…
9
Utilisation avancée de R avec RStudio
Un fichier .Rprofile peut être placé dans le dossier. Le script R qu’il contient est exécuté
systématiquement à l’ouverture du projet, ce qui permet par exemple de charger les packages
nécessaires.
Le projet est prêt à être utilisé, il ne reste qu’à créer les fichiers de script R.
Documentation rapide
Les scripts doivent être documentés par des commentaires (introduits par #). La création d’un
rapport de résultat d’un script est fait basiquement en copiant les lignes de la console R, incluant
le code lignes préfixées par un chevron >) et les résultats, les figures étant copiées manuellement :
●
●
●
Export puis Copy Plot to clipboard,
Cliquer sur MetaFile pour copier une image vectorielle, en évitant Bitmap, qui crée une image
raster.
Fixer la taille : pour une image vectorielle, la taille détermine le rapport hauteur/largeur et la
taille relative des textes (légendes). R essaie de maintenir une taille constante des textes, qui
sont donc relativement plus petits si l’image est plus grande.
Il est possible d’automatiser la création de rapports simples avec les outils fournis par le package
knitr.
Portfolio
À partir d’un script R (sauvegardé dans un fichier .R), utiliser simplement le menu File
/ Compile Notebook... Le script suivant :
# Résumé des données
summary(cars)
# Figures
10
Projet R
plot(cars)
produit un fichier (PDF, Word ou HTML au choix) qui peut être enregistré et diffusé (les images
sont intégrées, le rapport est contenu dans un seul fichier) :
Il est possible de formater mieux le rapport : les commentaires préfixés par #’ seront traités
comme du texte, et les formatages Markdown (voir plus bas) sont traités : voir la ligne de titre
dans l’exemple ci-dessous. Le code est traité comme des chunks de knitr (voir plus bas) dont les
options peuvent être spécifiées dans les lignes de commentaires préfixées par #+ (ici, la taille de
l’image). Le script devient :
#' Titre
#' ======
#' Résumé des données, avec formules mathématiques en TeX : $\beta$
summary(cars)
#' Figures
#+ image, fig.width=4, fig.height=4
plot(cars)
et produit le rapport suivant :
11
Utilisation avancée de R avec RStudio
Rapport Markdown
Cette approche est intermédiaire entre un portfolio et un rapport Sweave écrit en LaTeX (paragraphe suivant).
Utiliser le menu File / New File / R Markdown.
Un fichier Markdown est un rapport rédigé dans un langage plus simple que LaTeX mais dans le
même esprit. Utiliser le menu d’aide de la barre pour la documentation de référence. Il contient
du texte, au format Markdown, et des morceaux de code (chunks) délimités par des marques spécifiques :
Title
========================================================
This is an R Markdown document. Markdown is a simple formatting syntax for
authoring web pages (click the **Help** toolbar button for more details on
using R Markdown).
When you click the **Knit HTML** button a web page will be generated that
includes both content as well as the output of any embedded R code chunks
within the document. You can embed an R code chunk like this:
```{r}
12
Projet R
summary(cars)
```
You can also embed plots, for example:
```{r fig.width=7, fig.height=6}
plot(cars)
```
Le bouton Knit HTML produit un rapport au format HTML :
Rapport Sweave
Un rapport Sweave est un document élaboré, écrit en LaTeX avec intégration de morceaux de
code R exécutés au moment de la compilation, qui permettent d’assurer que les résultats du rapport (sorties de R, figures) sont bien le résultat du code, suivant le modèle de la recherche reproductible 5 .
Utiliser le menu File / New File / R Sweave.
Le document est sauvegardé avec l’extension .Rnw. Sa syntaxe est celle de LaTeX. Il est possible d’utiliser des packages, la bibliographie, des modèles… La compilation du document se fait
en deux temps : Sweave (qui était un package mais a été intégré à R) produit un fichier .tex à
partir du fichier .rnw, le relais est ensuite passé à la chaîne de production de LaTeX pour produire un document pdf.
5
http://en.wikipedia.org/wiki/Reproducibility#Reproducible_research
13
Utilisation avancée de R avec RStudio
Deux outils sont disponibles pour traiter les fichiers .rnw : Sweave et knitr. Le choix se fait dans
les options du projet.
Chunks
En plus de la syntaxe LaTeX6 , les chunks sont insérés dans le code avec la syntaxe suivante :
<<>>=
2+2
@
Le chunk précédent sera intégré dans le texte : code et résultat. Le fichier suivant :
\documentclass{article}
\begin{document}
\SweaveOpts{concordance=TRUE}
Texte \LaTeX et chunks:
<<>>=
2+2
@
\end{document}
produit le fichier pdf :
Les options des chunks sont saisies entre les crochets de la première ligne :
<<Addition, echo=TRUE, eval=TRUE>>=
2+2
@
●
●
6
Le nom du chunk,
Les options (au format Sweave) :
 echo (=TRUE par défaut) : affichage du code dans le document
 eval (=TRUE par défaut) : exécution du code (et donc affichage des résultats dans le document).
 include (=TRUE par défaut) : affichage du résultat du code.
Documentation complète : http://fr.wikibooks.org/wiki/Latex
14
Projet R
Tous les chunks sont exécutés dans l’ordre comme un seul script R. Les librairies doivent être
chargées, les variables créés par un chunk sont disponible pour les suivants. Enfin, un chunk peut
inclure le code d’un autre :
<<Inclusion>>=
1
<<Addition>>
@
est équivalent à :
<<Inclusion>>=
1
2+2
@
Figures
Un chunk produit une figure s’il contient l’option fig=TRUE, par exemple :
<<fig =TRUE , echo =FALSE >>=
boxplot ( Ozone ~ Month , data = airquality )
@
Dans le fichier .Rnw, le chunk remplace la commande :
\includegraphics{figOzone.pdf}
Le code complet pour afficher une figure est par exemple :
\begin{figure}
\begin{center}
<<figOzone, fig =TRUE , echo =FALSE >>=
boxplot ( Ozone ~ Month , data = airquality )
@
\end{center}
\caption{Légende}
\label{figOzone }
\end{figure}
echo =FALSE permet de cacher le code et n’afficher que la figure. Les options utiles pour les
figures sont la largeur et la hauteur du fichier .pdf produit :
●
●
width = 4 : largeur en pouces,
height
= 3 : hauteur en pouces.
Ces tailles influent sur l’aspect du texte dans le fichier : si la taille des caractères des légendes
n’est pas précisé dans le code R, le texte est dimensionné pour être lisible en fonction de la taille
de la figure. Augmenter la taille revient à réduire la taille relative du texte. D’autre part, changer
le rapport hauteur / largeur modifie l’aspect de la figure. La taille de la figure dans le document
final est fixée par le code TeX, pas par les options de chunk.
Pour afficher le code de la figure dans le texte et la figure à part, utiliser fig =TRUE et include=FALSE dans le chunk de code. Il sera affiché, évalué, et produira une figure du nom du
chunk avec l’extension .pdf, préfixé par le nom du fichier .Rnw suivi d’un tiret (voir
l’exemple). La commande \includegraphics{} de TeX permettra d’utiliser la figure :
Le code de la figure~\ref{figOzone} est le suivant :
<<Ozone, fig =TRUE , include =FALSE >>=
boxplot ( Ozone ~ Month , data = airquality )
@
15
Utilisation avancée de R avec RStudio
\begin{figure}
\begin{center}
\includegraphics{NomFichierRnw-Ozone.pdf}
\end{center}
\caption{Légende}
\label{figOzone}
\end{figure}
Options de Sweave
Des options peuvent être fixées au niveau du document entier en incluant la commande suivante
dans le fichier .Rnw , juste après le début du document :
\begin{document}
\SweaveOpts{concordance=TRUE, keep.source=FALSE, width=5, height=4}
Les deux dernières options sont la taille par défaut des graphiques, utilisée si elle n’est pas modifiée au niveau de chaque chunk. keep.source=FALSE demande à Sweave d’interpréter
toutes les commandes et de les réécrire, ce qui permet d’automatiser leur formatage (retours à la
ligne, espaces entres les signes…) au prix de la perte des commentaires. concordance=TRUE
est une option ajoutée par Rstudio (modifiable dans les options générales) pour la création d’un
fichier de concordance des numéros de lignes entre le fichier .Rnw et le fichier .tex produit, ce
qui permet de retrouver l’emplacement des erreurs de compilation en convertissant les numéros
de lignes du fichier .tex en numéros de lignes du fichier .Rnw.
Ces options peuvent être complétées par les options de R, insérées dans le premier chunk par
exemple, pour modifier l’aspect du code :
<<Declarations, echo=FALSE>>=
options(prompt = "R> ", continue = "+
@
", width = 70, useFancyQuotes = FALSE)
Le code sera préfixé par « R> » au lieu de « > », coupé à 70 caractères pour un retour à la ligne
préfixé par « + » suivi de deux espaces. Les guillemets produits par la fonction sQuote par
exemple seront unidirectonnels et non bidirectionnels en Anglais comme le prévoit la grammaire.
Rapports knitr
knitr apporte des nouvelles fonctionnalités, principalement la gestion du cache des chunks : un
chunk n’est pas réévalué à chaque compilation du document. Un dossier cache est créé pour
stocker les données nécessaires. Les figures sont stockées dans un dossier figure, et leur nom
est celui du chunk, sans préfixe.
La syntaxe est un peu différente. Un fichier Sweave peut être rapidement converti en fichier knitr
avec la commande Sweave2knitr, utiliser l’aide pour obtenir sa syntaxe :
> ?Sweave2knitr
16
Projet R
Options de knitr
Les options 7 ne sont pas déclarées dans une commande du fichier .Rnw comme pour Sweave,
mais dans une commande R dans le premier chunk :
<<Declarations, echo=FALSE, include=FALSE>>=
library(knitr)
# set global chunk options
opts_chunk$set(cache=TRUE, warning=FALSE, tidy=FALSE, fig.width=8,
fig.height=6, out.width='0.7\\maxwidth')
@
Les options principales sont :
●
●
●
●
cache=TRUE : demande que tous les chunks soient mis en cache, et recalculés seulement si
leur code est modifié.
warning=FALSE : n’affiche pas les avertissements renvoyés par le code.
tidy=FALSE : ne conserve pas le code R tel quel mais le reformate.
fig.width=8 : largeur des figures, en pouces (idem fig.height).
out.width='0.7\\maxwidth' : commande de formatage de la figure qui sera écrite dans
le fichier .tex (idem out.height). La chaîne entre guillemets est passée au fichier TeX, entre
les crochets de la commande \includegraphics. L’antislash est utilisé pour protéger le
caractère suivant : \\ est nécessaire pour obtenir \ :
\includegraphics[0.7\maxwidth]{…}
●
●
●
●
prompt(=FALSE par défaut) : n’affiche pas de chevron avant les commandes R, pour simplifier leur copie depuis le document final
comment (=## par défaut) : affiche un double dièse devant les résultats du code, pour les
différencier et permettre leur copie en tant que commentaires.
highlight (=TRUE par défaut) : afficher le code en couleur pour simplifier sa lecture.
background (='#F7F7F7' par défaut) :couleur de fond des chunks.
L’aspect des zones de code est donc très différent de celui de Sweave par défaut.
Ces options peuvent être fournies à chaque chunk.
Options des chunks
Les options de base des chunks sont les mêmes que pour Sweave :



7
echo (=TRUE par défaut) : affichage du code dans le document
eval (=TRUE par défaut) : exécution du code (et donc affichage des résultats dans le document).
include (=TRUE par défaut) : affichage du résultat du code.
Documentation complète : http://yihui.name/knitr/options
17
PACKAGE R
Un package R est un ensemble de code et de données, complété par une documentation, qui
permet de rassembler un ensemble de fonctions dans un tout cohérent, qui peut être diffusé.
La structure d’un package obéit à des règles strictes présentées ici.
Création d’un package
La façon la plus rapide pour créer un package consiste à rassembler le code déjà écrit dans un ou
plusieurs fichiers .R et d’utiliser le menu File / New Project, puis New Directory/R Package.
Compléter ensuite le formulaire de création :
Le type de package est Package w/Rcpp s’il doit contenir du code C. Ce choix est définitif : si du
code C doit être ajouté à un package existant, le plus simple sera d’en créer un nouveau et d’y
transférer tous les fichiers de l’ancien.
Le nom du package doit être court, sans espaces ni caractères spéciaux.
Tous les fichiers de code sont ajoutés avec la commande Add.
Un nouveau dossier est créé dans le répertoire sélectionné. C’est un projet R (il contient un fichier .Rproj) et il contient la structure de base d’un package.
Structure d’un package
La liste des dossiers et fichiers nécessaires est détaillée ici. Les dossiers ou fichiers supplémentaires placés dans le répertoire de projet causeront des avertissements au moment de la vérification du package. Pour éviter que certains dossiers créés par RStudio par exemple ne soient pris
en compte, il est possible de créer un fichier .Rbuildignore à la racine du projet. Chaque
19
Utilisation avancée de R avec RStudio
ligne est une expression régulière qui décrit les fichiers à ignorer. Le modèle suivant permet
d’éliminer les fichiers de projet de RStudio, quelques résultats de la compilation des vignettes et
le dossier de travail de Mercurial. Il peut être utilisé dans la majorité des situations, quitte à le
compléter.
^.*\.Rproj$
^\.Rproj\.user$
^\_sgbak$
^\.hg$
\.synctex\.gz$
\.tex$
\.log$
\.blg$
Les fichiers de travail utilisés pour le développement du package doivent être placés dans le répertoire .#Extra qui est toujours ignoré, plutôt que d’ajouter des lignes à .Rbuildignore.
Fichier DESCRIPTION
Le fichier contient la description du package sous une forme normalisée :
Package: MonPackage
Type: Package
Title: What the package does (short line)
Version: 1.0
Date: 2013-03-08
Author: Who wrote it
Maintainer: Who to complain to <[email protected]>
Description: More about what it does (maybe more than one line)
License: What license is it under?
Les package nécessaires au fonctionnement du package actuel doivent être déclarés sous la
forme d’une commande Imports ou Depends. La différence entre les deux commandes est
que l’ordre de recherche des fonctions des packages importés sera différent 8 . Imports :
package implique que le package sera chargé en même temps que le package actuel (comme si
la commande library(package) était exécutée). Import n’importe que l’espace de noms
sans charger le package : tout appel à une commande de package échouera si package n’est
pas appelé explicitement avant de l’utiliser. Import présente en revanche l’avantage de ne pas
risquer que des commandes du package actuel soient masquées par des commandes du même
nom d’un autre package chargé plus tard. Utiliser Import de préférence :
Imports : package
Fichier NAMESPACE
Le fichier précise comment l’espace de nom du package est exporté vers R. Si toutes les fonctions du package doivent être accessibles (cas général), la commande suivante est utilisée
exportPattern("^[[:alpha:]]+")
8
http://obeautifulcode.com/R/How-R-Searches-And-Finds-Stuff/
20
Package R
Les espaces de nom des packages dont le package actuel dépend doivent être importés pour permettre à un éventuel package dépendant de trouver toutes les fonctions du package actuel mais
aussi de ceux dont il dépend :
import(Package)
Fichier NEWS
Ce fichier optionnel contient les informations concernant les mises à jour du package. Il apparaît
dans l’index de l’aide du package. Son format est libre, par exemple :
CHANGES IN package VERSION 1.1
==============================
OVERVIEW
o First version.
Répertoire Man : description du package
Un fichier portant le nom du package suffixé par –package est créé dans le dossier man. Il
contient des données identiques à celles de DESCRIPTION et d’autres informations formatées
pour l’aide du package.
name, alias, docType
Créés automatiquement.
\name{MonPackage-package}
\alias{MonPackage-package}
\alias{MonPackage}
\docType{package}
title
Description du package en une ligne courte, sans formatage.
\title{
What the package does (short line)
~~ package title ~~
}
description
Description du contenu du package. Le formatage est possible en utilisant la syntaxe de LaTeX.
\description{
More about what it does (maybe more than one line)
~~ A concise (1-5 lines) description of the package ~~
}
details
Description standardisée du package, sous la forme d’un tableau (compléter la version, la date et
la licence choisie), complétée par des informations complétant celles de description.
\details{
21
Utilisation avancée de R avec RStudio
\tabular{ll}{
Package: \tab MonPackage\cr
Type: \tab Package\cr
Version: \tab 1.0\cr
Date: \tab 2013-03-08\cr
License: \tab What license is it under?\cr
}
~~ An overview of how to use the package, including the most important
functions ~~
}
author
Auteurs du package.
\author{
Who wrote it
Maintainer: Who to complain to <[email protected]>
~~ The author and/or maintainer of the package ~~
}
references
Références bibliographiques, saisies et formatées manuellement.
\references{
~~ Literature or other references for background information ~~
}
keyword
Mots-clés. Utiliser la commande RShowDoc("KEYWORDS") pour obtenir la liste des mot-clés
recommandée. Conserver le mot-clé package par défaut.
~~ Optionally other standard keywords, one per line, from file KEYWORDS in
the R documentation ~~
~~ directory ~~
\keyword{ package }
seealso
Renvois vers d’autres fichiers d’aide, par exemple d’autres packages. La commande \link{}
permet de créer un lien hypertexte vers tout objet R.
\seealso{
~~ Optional links to other man pages, e.g. ~~
~~ \code{\link[<pkg>:<pkg>-package]{<pkg>}} ~~
}
examples
Exemples. Le code doit être exécutable sans erreur, et en quelques secondes pour passer les tests
de validation de CRAN.
\examples{
~~ simple examples of the most important functions ~~
}
22
Package R
Répertoire R : code des fonctions
Le répertoire contient des fichiers R qui contiennent le code des fonctions. Le plus simple est de
créer un fichier par fonction, dont le nom est celui de la fonction, mais n’importe quelle organisation est possible : tous les fichiers R sont pris en compte, quel que soit leur nom et leur contenu.
Code des fonctions C
RStudio ajoute un répertoire src pour le code C. Il contient par défaut trois fichiers : Makevars, Makevars.win (sous Windows) et RcppExports.cpp. Ces fichiers sont maintenaus automatiquement par RStudio. Le code utilisateur doit être ajouté dans d’autres fichiers
avec l’extension .cpp. Plusieurs fonctions peuvent être placées dans le même fichier. L’entête
du fichier ne doit pas être modifiée, et le code ajouté en-dessous :
#include <Rcpp.h>
using namespace Rcpp;
// [[Rcpp::export]]
void MonCode(SEXP Rx) {
NumericVector x(Rx);
x = 2*x;
}
La fonction MonCode ci-dessus ajoute 1 au vecteur numérique Rx (directement modifié par le
code C).
Une fonction R du même nom acceptant les mêmes arguments est exportée (automatiquement).
Elle doit être documentée dans un fichier .Rd : une entrée d’alias doit exister dans un fichier de
documentation. Si le code C n’est utilisé que pour des calculs intermédiaires, toutes les fonctions
écrites en C peuvent être documentées dans le même fichier .Rd incluant le mot-clé internal.
Le débogage des fonctions C n’est pas facile. Le principal outil permettant de suivre le déroulement du code est la fonction Rf_PrintValue qui permet d’écrire dans la console de R à partir de C :
void TestPrint(SEXP Rx) {
NumericVector x(Rx);
}
Rf_PrintValue(x);
Rf_PrintValue(wrap(x[0]));
printf("%f", x[0]);
En exécutant TestPrint(1:5) dans R, on obtient :
[1] 1 2 3 4 5
[1] 1
1.000000
Les couleurs du code et de la sortie correspondent :
●
●
Rf_PrintValue() permet d’afficher dans la console R un objet R.
Si l’objet n’est pas un objet R mais un réel par exemple, on peut utiliser wrap() pour en faire
un objet R.
23
Utilisation avancée de R avec RStudio
●
On peut aussi utiliser printf() plutôt que Rf_PrintValue(wrap()), mais le résultat est
formaté.
Répertoire man : aide des fonctions
Le dossier contient les fichiers de documentation .Rd. Leur syntaxe est la suivante :
name
Nom du fichier de documentation qui sera affiché comme titre : celui de la fonction en général,
ou un nom résumant l’ensemble du contenu du fichier de documentation.
\name{MaFonction}
alias
Une entrée d’alias est nécessaire pour toutes les fonctions trouvées dans le répertoire R. Un fichier .Rd peut en documenter plusieurs : ajouter autant d’alias que nécessaire.
\alias{MaFonction}
%- Also NEED an '\alias' for EACH other topic documented here.
title
Le titre du fichier de documentation, sans formatage.
\title{
%% ~~function to do ... ~~
}
description
Description de ce que font les fonctions documentées. Le formatage est possible.
\description{
%% ~~ A concise (1-5 lines) description of what the function does. ~~
}
usage
La syntaxe de chaque fonction doit être rappelée, exactement comme elle apparaît dans le fichier
.R.
\usage{
MaFonction(x)
}
Les méthodes génériques nécessitent une syntaxe particulière, par exemple pour la méthode
print.MaClasse :
\method{summary}{MaClasse}(object, \dots)
arguments
Chaque argument apparaissant dans une des fonctions de la section usage doit être décrit.
\arguments{
24
Package R
}
\item{x}{
%%
~~Describe \code{x} here~~
}
details
Cette section permet de décrire plus en détail l’intérêt des fonctions, ou bien de donner des précisions techniques, des références...
\details{
%% ~~ If necessary, more details than the description above ~~
}
value
Description des résultats des fonctions, notamment leur structure si ce ne sont pas seulement des
nombres.
\value{
%% ~Describe the value returned
%% If it is a LIST, use
%% \item{comp1 }{Description of 'comp1'}
%% \item{comp2 }{Description of 'comp2'}
%% ...
}
references
Références bibliographiques, saisies et formatées manuellement.
\references{
%% ~put references to the literature/web site here ~
}
author
Auteur du code.
\author{
%% ~~who you are~~
}
note
Remarques, au-delà de ce qui est présenté dans la section details.
\note{
%% ~~further notes~~
}
seealso
Renvois vers les autres fonctions relatives à celles qui sont décrites. La commande \link{}
permet de créer un lien hypertexte vers tout objet R.
\seealso{
%% ~~objects to See Also as \code{\link{help}}, ~~~
}
25
Utilisation avancée de R avec RStudio
examples
Exemples. Le code doit être exécutable sans erreur, et en quelques secondes pour passer les tests
de validation de CRAN.
\examples{
##---- Should be DIRECTLY executable !! ---##-- ==> Define data, use random,
##-- or do help(data=index) for the standard data sets.
## The function is currently defined as
function (x)
{
}
}
keyword
Mots-clés. Le mot-clé internal permet de cacher les fonctions dans l’index de l’aide.
% Add one or more standard keywords, see file 'KEYWORDS' in the
% R documentation directory.
\keyword{ ~kwd1 }
\keyword{ ~kwd2 }% __ONLY ONE__ keyword per line
Répertoire data : données
Le répertoire data contient les données fournies avec le package, sous la forme d’un ou plusieurs
fichiers .RData.
Pour créer un fichier .RData, ouvrir une session R, créer toutes les variables nécessaires. Vérifier le contenu de l’environnement de R, c'est-à-dire la liste des variables en mémoire, dans la
fenêtre Environnement de RStudio. Supprimer les variables excédentaires avec la fonction
rm(NomVariable) puis sauvegarder l’environnement.
Pour utiliser les données dans le package, c'est-à-dire les recharger dans l’environnement de R, le
fichier de données sera chargé par la commande data(NomFichier), sans l’extension
.RData.
Répertoire man : description des données
Une entrée d’alias dans un fichier d’aide est nécessaire pour chaque variable (indépendamment
des fichiers .RData).
name
Nom du fichier de documentation qui sera affiché comme titre. Peut contenir le nom de la variable ou un nom plus explicite si plusieurs variables sont regroupées dans un seul fichier d’aide.
\name{Nom}
alias
Une entrée d’alias est nécessaire pour toutes les variables trouvées dans le répertoire R. Un fichier .Rd peut en documenter plusieurs : ajouter autant d’alias que nécessaire.
26
Package R
\alias{NomVariable}
usage
Contient la commande de chargement du fichier .Rdata qui contient les variables.
\usage{
data(NomFichier)
}
docType
docType doit contenir le type data.
\docType{data}
source
Description de l’origine des données, en texte libre. À compléter par les références bibliographiques dans la section reference.
\source{
%% ~~ reference to a publication or URL from which the data were obtained ~~
}
title, description, details, reference, examples, keyword
Identiques aux fichiers d’aides de fonctions.
Fichier inst/CITATION
Informations pour citer le package, utilisées par la fonction citation("NomPackage"). Ce
fichier est optionnel mais recommandé : en son absence, R va chercher les informations dans
DESCRIPTION.
Exemple tiré du package entropart :
citHeader("To cite entropart in publications use this reference:")
citEntry
(
entry="Article",
title = "entropart, an R package to partition diversity",
author = personList(as.person("E. Marcon"), as.person("B. Herault")),
journal = "Methods in Ecology and Evolution",
year = "submitted",
volume = "0",
number = "0",
pages = "1-2",
textVersion =
paste("Marcon, E. and Herault, B.",
"(sumitted): ",
"entropart, an R package to partition diversity.",
"Methods in Ecology and Evolution.",
"0(0): 1-2",
sep="")
)
citHeader contient un texte libre, citEntry est structuré en éléments correspondant à peu
près à une syntaxe bibliographique BibTeX (pour produire une référence directement copiable),
27
Utilisation avancée de R avec RStudio
mais les valeurs respectent la syntaxe de R. Les auteurs doivent être déclarés sous forme de
chaînes de caractères converties par la fonction as.person et compilées par personList.
Une version texte est ajoutée dans textVersion.
Vignettes
Les fichiers .Rnw des vignettes doivent être placés dans le répertoire vignettes, avec tous les
fichiers nécessaires (données non incluses dans le package, images non générées par les chunks
par exemple).
Pour être reconnu comme une vignette et donc apparaître dans la table des matières de l’aide du
package, le fichier .Rnw doit contenir la commande suivante, généralement en début de fichier :
% \VignetteIndexEntry{User manual}
Le texte entre les accolades sera le descritptif du contenu de la vignette.
Le choix du moteur de création des vignettes est fait dans les options du projet. Pour un fichier
donné, il peut être modifié en utilisant la commande :
% \VignetteEngine{knitr::knitr}
ou
% \VignetteEngine{utils::Sweave}
Pour qu’une vignette knitr soit intégrée correctement dans le package, le fichier DESCRIPTION
du package doit contenir les deux lignes suivantes :
VignetteBuilder: knitr
Suggests: knitr
Et la déclaration du moteur de vignette doit être explicite dans les fichiers .Rnw.
Après compilation du package, les vignettes sont accessibles depuis l’aide du package. À partir
de l’index :
La page des vignettes s’affiche. Le fichier pdf peut être chargé, comme les chunks :
28
Package R
Répertoire .#Extra
Ce répertoire est ignoré au moment de la compilation du package : il peut donc être utilisé pour
tester du code, stocker des données avant leur inclusion dans le package : c’est un répertoire de
travail.
Compilation
Dès qu’un minimum de contenu est disponible, il est utile de compiler le package pour vérifier
qu’il ne contient pas d’erreurs. L’organisation présentée ici suppose que l’utilisateur a le droit
d’écriture dans le dossier library de R. Les outils de R (Rtools) doivent être installés.
Utiliser le bouton Build & Reload dans la fenêtre Build de Rstudio pour lancer la compilation. Le
package est compilé, réinstallé dans la librairie de R (comme s’il était chargé depuis CRAN) et R
est redémarré. Attention : la commande échoue si le package n’est pas déjà installé et que le fichier .Rprofile contient la commande libray(package). Dans ce cas, renommer temporairement .Rprofile pour le désactiver le temps de la première compilation.
Build & Reload permet d’utiliser en permanence la version à jour du package en cours de développement.
Quand le package est prêt, utiliser la commande Check pour lancer une vérification complète du
code, des exemples, et de la conformité aux standards. Corriger les erreurs, avertissements et
notes jusqu’à ce que la vérification n’en renvoie plus aucun, sinon le package sera rejeté par
CRAN.
Enfin, créer les fichiers d’installation :
●
●
More / Build Source Package : crée le fichier source au format .tar.gz. Le fichier pourra
être publié sur CRAN ou installé avec la commande Tools / Install Packages (Install from
Package Archive File) de RStudio.
More / Build Binary Package : crée un fichier zip pour les utilisateurs de Windows qui ne disposent pas des outils de R installer un fichier source (ceux qui n’utilisent pas RStudio ont un
menu pour installer un package à partir d’un fichier zip dans l’interface graphique standard de
R).
29
Utilisation avancée de R avec RStudio
Publication
Un package terminé peut être publié sur CRAN par une interface web simple à utiliser 9 . La
phase de validation dure quelques jours : toutes les corrections demandées doivent être apportées
et le package corrigé soumis à nouveau par la même voie.
9
http://xmpalantir.wu.ac.at/cransubmit/
30
CONCLUSION
L’utilisation de RStudio et knitr en complément de R permet de travailler plus rapidement et de
poduire du code mieux documenté. La création de packages est extrêment simplifiée par une
interface graphique simple.
31