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 !

1 Markdown et Rmarkdown

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.

2 Police de texte et sections dans un document

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

3 Enumération et listes

3.1 Liste standard

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) :

  • Un point important
  • Un autre point important
  • Encore un point important
    • On indente deux fois pour des sous listes

3.2 Liste numérotée

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) :

  1. Premier élément
  2. Deuxième élément
    1. On indente deux fois pour des sous listes numérotées
    2. On indente deux fois pour des sous listes numérotées
  3. Troisième élément
    • On indente deux fois pour des sous listes

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
  1. Premier élément
  2. Deuxième élément
    1. On indente deux fois pour des sous listes numérotées
    2. On indente deux fois pour des sous listes numérotées
  3. Troisième élément
    • On indente deux fois pour des sous listes

3.3 Insérer des citations ou des lignes

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 ---.


4 Ecrire des mathématiques

4.1 Signe $

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\]

4.2 Commandes mathématiques usuelles

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.

  • Les indices (indispensable) sont donnés avec _{...} ainsi, $$x_{i,j}$$ donne \[x_{i,j}\]
  • Les exposants sont donnés par ^{...} $x^{2}$ donne \(x^2\) et $$x_{i,j}^{2}$$ donne \[x_{i,j}^{2}\]
  • Le signe somme \(\sum\) est donné par $\sum$, ainsi, pour une somme allant de \(i = 1\) à \(n\), on écrit $$\sum_{i = 1}^n$$ \[\sum_{i = 1}^n\]
  • Les fractions se font avec $$\frac{5}{8}$$ \[\frac{5}{8}\]
  • Le chapeau de \(\hat{Y}\) avec $\hat{Y}$, la barre de \(\bar{x}\) avec $\bar{x}$
  • Les lettres grecques se font avec $\alpha, \beta, \gamma, \mu, \sigma$, \(\alpha, \beta, \gamma, \mu, \sigma\)
  • Les \(\dots\) peuvent s’écrire avec $\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.

5 Insérer des liens et des figures

On peut insérer des liens vers des sites …

[Lien vers une livre utile](https://bookdown.org/yihui/rmarkdown/)

Lien vers une livre utile

… ou des images.

![](https://lms.agreenium.fr/pluginfile.php/1/core_admin/logocompact/0x70/1562235230/agreenU_bleu.png)

6 Insérer du code R

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

6.1 Chunk de base

```{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.

6.2 Nommage d’un chunk

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.

6.3 Montrer ou cacher le code, les options 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.

6.4 Evaluer le code ou non, l’option 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

6.5 Afficher ou masquer les messages, l’option 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)
## ```

6.6 Fixer les options par défaut

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.

6.7 Inclure du code R dans le texte

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 !

7 Inclure des figures issues de R

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)
```

8 Inclure des tableaux issus de R

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

8.1 Mise en valeur de cases d’un tableau

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.