Il est possible d’écrire des rapports et autres documents avec Rstudio.
Ces rapports auront la particularité de mélanger un traitement de texte classique et du code R. Ainsi, vous pourrez effectuer toute votre démarche d’analyse directement depuis Rstudio !
Markdown est un langage de balisage léger, c’est à dire possédant un manière de formater les textes très lisible avec un éditeur simple (par exemple le bloc note).
Cela permet donc d’écrire un document. Si dans ce document, vous voulez inclure du code R, alors votre document sera écrit en Rmarkdown.
Pour créer un document Rmardown (c’est à dire ayant un extension .Rmd
) dans Rstudio, regardez la vidéo associée à ce document.
Dans la suite de ce document, nous donnons quelques éléments de syntaxe pour la rédaction de votre rapport et l’inclusion des codes associés.
On peut mettre du texte en _italique_, *italique*, en __gras__, **gras** ou même en `monospace`.
On peut mettre du texte en italique, italique, en gras, gras ou même en monospace
.
Les sections sont repérées par les #
. Vous pouvez créer différent niveaux de section (essayez dans votre document).
# Titre de niveau 1
# Titre de niveau 2
## Titre de niveau 3
Si dans votre document vous réécrivez le texte suivant :
Je vais énoncer les points suivants (attention au saut de ligne) :
- Un point important
- Un autre point important
- Encore un point important
- On indente deux fois pour des sous listes
Je vais énoncer les points suivants (attention au saut de ligne) :
Je vais faire une liste numérotée (attention au saut de ligne) :
1. Premier élément
2. Deuxième élément
1. On indente deux fois pour des sous listes numérotées
3. Troisième élément
- On indente deux fois pour des sous listes
Je vais énumérer une liste (attention au saut de ligne) :
Il n’y a en fait pas besoin de se souvenir de la numérotation.
1. Premier élément
1. Deuxième élément
a. On indente deux fois pour des sous listes numérotées
a. On indente deux fois pour des sous listes numérotées
1. Troisième élément
- On indente deux fois pour des sous listes
On peut insérer des citations avec >
.
> Les chiens ne font pas des chats
Les chiens ne font pas des chats
On peut insérer des lignes horizontales avec ---
.
$
Il est facile d’écrire des mathématiques propres ! Il faut entourer son expression mathématique de $
.
On peut écrire des maths dans le texte $x = 2$.
On peut écrire des maths dans le texte \(x = 2\).
Si vous doublez les $
, cela écrit les maths “hors ligne” (l’équation est mise en valeur).
On peut mettre en relief notre équation en la mettant hors texte $$x = 2$$
On peut mettre en relief notre équation en la mettant hors texte \[x = 2\]
Pour ceux qui connaissent le langage \(\LaTeX\), vous pouvez reprendre toutes vos connaissances (hors packages), elles seront reconnues !
Pour les autres, ce n’est pas grave, voilà quelques commandes utiles.
_{...}
ainsi, $$x_{i,j}$$
donne \[x_{i,j}\]^{...}
$x^{2}$
donne \(x^2\) et $$x_{i,j}^{2}$$
donne \[x_{i,j}^{2}\]$\sum$
, ainsi, pour une somme allant de \(i = 1\) à \(n\), on écrit $$\sum_{i = 1}^n$$
\[\sum_{i = 1}^n\]$$\frac{5}{8}$$
\[\frac{5}{8}\]$\hat{Y}$
, la barre de \(\bar{x}\) avec $\bar{x}$
$\alpha, \beta, \gamma, \mu, \sigma$
, \(\alpha, \beta, \gamma, \mu, \sigma\)$\dots$
Ainsi, pour un échantillon $x = (x_1, \dots, x_n)$, de moyenne empirique $\bar{x}$, la variance empirique, notée $\hat{\sigma}^2$, a pour expression
$$\hat{\sigma}^2 = \frac{1}{n-1} \sum_{i = 1}^n (x_i - \bar{x})^2.$$
Ainsi, pour un échantillon \(x = (x_1, \dots, x_n)\), de moyenne empirique \(\bar{x}\), la variance empirique, notée \(\hat{\sigma}^2\), a pour expression \[\hat{\sigma}^2 = \frac{1}{n-1} \sum_{i = 1}^n (x_i - \bar{x})^2.\] On n’oublie pas le point final, même après une expression mathématique.
On peut insérer des liens vers des sites …
[Lien vers une livre utile](https://bookdown.org/yihui/rmarkdown/)
… ou des images.

Le code R s’inclue dans un environnement appelé chunk.
```{r}
mon code R
```
Un chunk R peut être inséré dans le document .Rmd
en utilisant ctrl + alt + I
(Windows, Linux) ou option + command + I
(Mac) ou en cliquant sur Insert -> R
```{r}
x <- 4 # Cette commande est évaluée
x # x est alors imprimé, l'impression est faite dans le document
```
Si vous insérer ce chunk dans votre document, tous le code sera montré, il sera évalué, et les résultats seront affichés dans le document.
x <- 4 # Cette commande est évaluée
x # x est alors imprimé, l'impression est faite dans le document
## [1] 4
À partir de cette base, de nombreuses options existent pour l’apparence d’un chunk et de sa sortie.
Vous pouvez donner un nom unique à votre chunk.
```{r nom_du_chunk}
# My Code
```
Le nom d’un chunk facilite la navigation dans le document et le débuggage.
echo
et include
Si un code ne vous intéresse que pour ses résultats (production d’un graphique par exemple), vous n’êtes pas obligé de le montrer. Il suffit alors de le cacher grâce à l’option echo=FALSE
.
```{r exemple_echo, echo=FALSE}
x <- 4
x
```
Dans ce cas, le code n’apparaitra pas dans le document mais les résultats seront quand même visibles.
## [1] 4
Si l’on ne souhaite ne montrer ni le code ni le résulat, on peut utiliser l’option include=FALSE
.
```{r exemple_include, include=FALSE}
x <- 5
x
```
Le code est quand même évalué.
print(x) # On veut imprimer la valeur de x
## [1] 5
Ces options doivent être utilisées avec prudence car elles peuvent gêner la reproductibilité des analyses si le code utilisé ou les packages chargés ne sont pas évidents.
eval
Parfois vous voulez montrer un code sans l’évaluer, pour des raisons didactiques, ou alors car le code est trop long à tourner. Pour cela, il suffit d’activer l’option eval=FALSE
```{r exemple_eval, eval=FALSE}
y <- 4
y # Ces lignes ne sont pas exécutées
```
Dans ce cas, le code est visible mais non evalué.
y <- 4
y # Ces lignes ne sont pas exécutées
print(y) # Cet objet n'existe pas!
## Error in print(y): objet 'y' introuvable
message
Vous avez sûrement remarqué que geom_histogram()
affichait un message d’avertissement vous incitant à régler le nombre de barres.
ggplot(iris) +
aes(x = Sepal.Length) +
geom_histogram()
## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.
Vous pouvez le masquer avec l’option mesage=FALSE
.
## ```{r exemple_sans_warning, message=FALSE}
## ggplot(iris) +
## aes(x = Sepal.Length) +
## geom_histogram()
## ```
ggplot(iris) +
aes(x = Sepal.Length) +
geom_histogram()
Cette option permet également de masquer les messages lors du chargement de packages.
## ```{r exemple_message, message=FALSE}
## library(tidyverse)
## ```
Si vous voulez fixer des options par défaut à tous vos chunks, il faut utiliser la fonction knitr::opts_chunk$set()
.
# Par défaut, tous les chunks seront montrés, mais non évalués
knitr::opts_chunk$set(echo = TRUE, eval = FALSE)
Typiquement, ce chunk n’a pas besoin d’être montré dans le document, on peut y mettre l’option include=FALSE
.
Dans cette autoformation, nous avons utilisé comment=NA
pour ne pas afficher les ##
présents par défaut devant les résultats.
Il est possible d’utiliser la valeur d’un objet R à l’intérieur du texte, et ainsi éviter d’écrire à la main des valeurs qui pourraient changer à l’avenir.
lancer <- sample(1:6, size = 1) # sample() tire un nombre dans 1:6
Il faut donc mettre l’objet désiré entre accents graves (backtick), précédé par un r
(pour comprendre qu’il doit l’évaluer).
Le résultat du lancer de dé est `r lancer` !
Le résultat du lancer de dé est 6 !
Vous pouvez évidemment inclure des figures créées dans un chunk, en gérant les options de sortie grâce à différentes options, commençant généralement par fig.
.
```{r chunk_fig, fig.align="center", fig.height=3.5, fig.width=8, echo=FALSE}
plot(iris$Sepal.Length, iris$Sepal.Width)
```
plot(iris$Sepal.Length, iris$Sepal.Width)
De manière générique pour inclure une figure, il est souvent préférable d’utiliser un chunk et la fonction knitr::include_graphics()
. L’option out.width
permet de gérer la taille
```{r chunk_include_graphics, fig.align="center", echo=FALSE, out.width="300px"}
knitr::include_graphics(https://lms.agreenium.fr/pluginfile.php/1/core_admin/logocompact/0x70/1562235230/agreenU_bleu.png)
```
Pour présenter un tableau, on peut utiliser la fonction knitr::kable()
.
my_data <- head(iris)
library(knitr)
kable(my_data)
Sepal.Length | Sepal.Width | Petal.Length | Petal.Width | Species |
---|---|---|---|---|
5.1 | 3.5 | 1.4 | 0.2 | setosa |
4.9 | 3.0 | 1.4 | 0.2 | setosa |
4.7 | 3.2 | 1.3 | 0.2 | setosa |
4.6 | 3.1 | 1.5 | 0.2 | setosa |
5.0 | 3.6 | 1.4 | 0.2 | setosa |
5.4 | 3.9 | 1.7 | 0.4 | setosa |
kable()
a de nombreuses options d’affichage (voir ?kable
).
kable(my_data, digits = 0) # On arrondit les nombres à l'unité
Sepal.Length | Sepal.Width | Petal.Length | Petal.Width | Species |
---|---|---|---|---|
5 | 4 | 1 | 0 | setosa |
5 | 3 | 1 | 0 | setosa |
5 | 3 | 1 | 0 | setosa |
5 | 3 | 2 | 0 | setosa |
5 | 4 | 1 | 0 | setosa |
5 | 4 | 2 | 0 | setosa |
On peut utiliser la librairie kableExtra pour mettre en valeur certaines cases ou lignes dans un tableau.
Nous allons mettre en valeurs les fleurs ayant de grandes longueur de sépales.
library(kableExtra)
my_data %>%
mutate(Sepal.Length = cell_spec(Sepal.Length, # On spécifie la couleur selon la condition
color = ifelse(Sepal.Length > 5, "red", "blue"))) %>%
kable(escape = FALSE) %>% # Pour ne pas considérer la couleur comme du texte
kable_styling("striped") # Alterne des bandes claires et sombres
Sepal.Length | Sepal.Width | Petal.Length | Petal.Width | Species |
---|---|---|---|---|
5.1 | 3.5 | 1.4 | 0.2 | setosa |
4.9 | 3.0 | 1.4 | 0.2 | setosa |
4.7 | 3.2 | 1.3 | 0.2 | setosa |
4.6 | 3.1 | 1.5 | 0.2 | setosa |
5 | 3.6 | 1.4 | 0.2 | setosa |
5.4 | 3.9 | 1.7 | 0.4 | setosa |
Aller voir la page dédiée de kableExtra pour des jolies sorties de tableaux.