---
title: "Cours logiciel R"
output:
  html_notebook: default
  pdf_document: default
---


### A propos de ce cours

Le contenu ci-dessous est largement inspir�  

* du livre *Statistiques avec R* de Cornillon et al. (disponible � la biblioth�que) 
* du cours de Anne Phillipe, Universit� de Nantes ([disponible sur sa page web](https://www.math.sciences.univ-nantes.fr/~philippe/download/Anne-Philippe-cours-R.pdf)). 

Le web regorge de ressources sur R:

* on pourra commencer par la fiche [Base R cheatsheet](https://www.rstudio.com/wp-content/uploads/2016/05/base-r.pdf).
* Pour plus de d�tails, on consultera de pr�f�rence la [page officielle du CRAN](https://cran.r-project.org) ainsi que le manuel [An introduction to R](https://cran.r-project.org/doc/manuals/r-release/R-intro.pdf). 
* Pour survoler rapidement les fonctions importantes, la [R reference card](https://cran.r-project.org/doc/contrib/Short-refcard.pdf) est bien utile.

Ce notebook R a �t� construit gr�ce � Markdown sous R studio. 

* Cet outil permet la r�daction de rapports int�grant du texte, du code et des sorties logiciels.
* La syntaxe est assez facile, on pourra consulter le code de ce document pour s'y initier.  
* Pour davantage de d�tails, consulter la [Rmarkdown cheatsheet](https://www.rstudio.com/wp-content/uploads/2015/02/rmarkdown-cheatsheet.pdf). 

En application de ce cours de d�couverte des fonctionnalit�s de base de R, nous utiliserons cette [fiche d'exercices](https://www.math.sciences.univ-nantes.fr/~philippe/R_freeware_files/Outil-info-pour-stat.pdf).  
**Il vous est demand� de traiter tous les exercices et de produire un rapport au format notebook de R**.  
Ce travail est **individuel** et � rendre par mail pour le **17 Mars**. 

*** 
***

### G�n�ralit�s sur le logiciel R

#### Le logiciel R
Le logiciel R est un logiciel de statistique distribu� gratuitement par le CRAN ([http://cran.r-project.org/](http://cran.r-project.org/)). Il est largement utilis� par la communaut� statistique, notamment les universitaires, et permet d'acc�der � de tr�s nombreux outils statistiques. R comporte les outils suivants:

* les fonctions de base,
* un langage de programmation orient� objet,
* des librairies (aussi appel�es packages) - plus de 1800 sur le site CRAN !

#### Console, script et �diteur 
On peut utiliser R en ligne de commande:

* Le symbole > indique que R attend une instruction.
* L'utilisateur rentre ses instructions et les valide avec la touche Entr�e.
* Si possible R ex�cute les instructions, affiche �ventuellement une sortie, puis de demande de nouvelles instructions.
* En cas d'instruction incompl�te, le symbole + s'affiche, indiquant que R attend la suite des instructions (instructions sur plusieurs lignes).
* Le symbole # permet de commenter son code,  les commandes de la ligne situ�es apr�s ce symbole ne sont pas �x�cut�es.
La ligne de commande n'est pas pratique d�s que le code devient long et complexe. On �crit alors un script dans un fichier annexe, avec l'extension .R et on l'ex�cute gr�ce � la commande $\texttt{source}$.
Il faut �ventuellement faire attention � la position du r�pertoire courant de R.
```{r}
source("mon_fichier.R") # ex�cute les instructions contenues dans mon_fichier.R
getwd() # affiche le nom du r�pertoire courant (working directory)
setwd('C:/Utilisateurs/Dombry/MonTP') # modifie le r�pertoire courant
```

Les �diteurs permettent de g�rer console, scripts et r�pertoire courant  de mani�re flexible gr�ce � une interface graphique avanc�e. Les deux �diteurs les plus courants sont Rgui et Rstudio.

#### Rstudio
On utilisera dans ce cours l'interface graphique Rstudio t�l�chargeable sur le site [https://www.rstudio.com/](https://www.rstudio.com/).
Rstudio incorpore plusieurs fonctionnalit�s:

* fen�tres pour  console, �diteur, environnement, historique, graphiques...
* raccourcis graphiques pour l'installation de package, le r�p�ertoire de travail, le d�bugage...
* des fonctionnalit�s suppl�mentaires � R, notamment Rmarkdown permettant l'�criture de notebooks permettant de m�langer texte, code R et sorties logiciels.

#### L'aide sous R
Il est essentiel de savoir utiliser l'aide de R afin d'avoir plus de pr�cisions sur l'utilisation d'une fonction: syntaxe, arguments, options ... 
```{r}
help(mean)
?plot
```
Lorsque l'on ne sait pas tr�s bien quoi chercher, on peut consulter l'aide g�n�rale ou encore interroger sur un sujet donn�.
```{r}
help.start()
help.search("median")
??quantile
```
On peut acc�der directement aux exemples d'une fonction ou aux d�monstrations ainsi:
```{r}
example(quantile)
demo(graphics)
demo()
```

#### Les packages
Un package est une biblioth�que de programmes externes , c'est-�-dire un ensemble de programmes R qui compl�te les fonctions de base et permet d'augmenter les fonctionnalit�s de R. Certains sont consid�rer comme indispensable et sont install�s par d�faut. Avant d'�tre utilis�, un package doit �tre install� (s'il ne l'est pas d�j�) gr�ce � la commande $\texttt{install.packages}$, puis obligatoirement charger gr�ce � la commande $\texttt{library}$. Les commandes suivantes sont les plus utiles, on peut aussi utiliser l'interface graphique (onglet Tools).
```{r}
install.packages(MASS, dependencies=T) #charger le package MASS avec ses d�pendances
library(MASS) # charger un package existant.
library(help = MASS) # retourne la liste des fonctions de la librairie MASS 
update.packages(MASS) # mettre � jour le package MASS
library() # lister les les packages install�s sur l'ordinateur
update.packages() # mettre � jour tous les packages
```
Exemple: la fonction $\texttt{mvrnorm}$ du package MASS permet de simuler des vecteurs Gaussiens. Pour l'ex�cuter, on commence par charger le package, puis on consulte l'aide de la fonction avant de l'utiliser.
```{r}
library(MASS) # charger un package existant.
?mvrnorm
mvrnorm(n=3,mu=c(0,1),Sigma=matrix(c(1,0,0.5,0.5),2,2))
```

*** 
***
### Les objets R
#### Cr�ation, affichage, suppression d'un objet
La cr�ation d'un objet se fait g�n�ralement par affectation an donnant un nom � l'objet avec l'un des trois op�rateurs <-, -> et =. Dans la suite, on privil�giera -> pour l'affectation. Si un objet n'existe pas, l'affectation le cr�e. Sinon, **l'affectation �crase la valeur pr�c�dente sans message d'avertissement**.

L'affichage se fait gr�ce � la commande $\texttt{print}$ ou tout simplement en appelant l'objet par son nom.

La liste de tous les objets cr�es s'obtient par la commande $\texttt{ls()}$. On supprime un ou plusieurs objets gr�ce � la commande $\texttt{rm(objet1,objet2,objet3)}$. De mani�re alternative � ces commandes en ligne, la fen�tre Environment de l'interface graphique permet la gestion des variables.

Exemples:
```{r}
a <- 41 # l'objet a est cr�� avec la valeur 41
a # on affiche a
print(a) # on affiche a
x <- a # x re�oit la valeur de a
x = a # x re�oit la valeur de a
a -> x # x re�oit la valeur de a
x <- cos # x est �cras� et devient une fonction
ls() # liste des objets cr�es
rm(a); ls() # on supprime a 
rm(list=ls()) # suppression de tous les objets

```

#### Les diff�rents types d'objets
Les types d'objets les plus usuels sont les suivants:

* **null** (objet vide): $\texttt{NULL}$
* **logical** (bool�en vrai/faux): $\texttt{TRUE}$, $\texttt{FALSE}$ abr�g� en $\texttt{T}$, $\texttt{F}$
* **numeric** (nombre r�el): $\texttt{1}$, $\texttt{2.3333}$, $\texttt{pi}$, $\texttt{1e-10}$
* **complex** (nombre complexe): $\texttt{2+0i}$, $\texttt{2i}$
* **character** (cha�ne de caract�res): $\texttt{'hello'}$, $\texttt{"1"}$
* **list** (liste = collections d'objets h�t�rog�nes)
* **function** (fonction): $\texttt{exp}$, $\texttt{solve}$, $\texttt{length}$


Chaque objet poss�de deux attributs intrins�ques: son mode  $\texttt{mode()}$ et sa longueur $\texttt{length()}$. Certains objets on plus d'attributs dont on peut conna�tre la liste gr�ce � la fonction $\texttt{attributes()}$.
```{r}
1<2
a <- cos(13); mode(a)
b <- 'toto'; mode(b)
c <- runif; mode(c)
```

On peut tester si objet est d'un type donn� gr�ce aux fonctions $\texttt{is.null()}$, $\texttt{is.numeric()}$, $\texttt{is.character()}$ ... Dans certains cas, on peut convertir un objet d'un type en un autre avec les commandes $\texttt{as.numeric()}$, $\texttt{as.character()}$... A utiliser avec prudence !
```{r}
a <- TRUE
a; as.numeric(a); as.character(a)
```
Dans certaines op�rations, les bool�ens sont assimil�s aux valeurs 0 (FALSE) et 1 (TRUE). Exemple:
```{r}
13+F+F
sum(T,F,F,F,T)
```

#### Valeurs sp�ciales: NA, Inf, NaN
Il est utile en statistique de pouvoir indiqu� qu'un objet n'est pas renseign�. Cela est fait gr�ce au symbole $\texttt{NA}$ (Not Available). Exemple:
```{r}
age <- c(27,25,28); age[4] <- NA # on cr�e une variable age avec la 4eme valeur manquante
age; is.na(age) # affichage et rep�rage des valeurs manquantes
age+3 # NA a ses propres r�gles de calcul
```
Les valeurs $\texttt{Inf}$ (infinity) et $\texttt{NaN}$ (Not a Number) proviennent g�n�ralement de probl�mes calculatoires. Exemple:
```{r}
1/0; exp(2019); log(-2)

```

#### Les vecteurs
#### Les matrices
#### Les facteurs
#### Les listes
#### Les fonctions