__AVIS IMPORTANT__
Depuis l'automne 2021, ce wiki a été discontinué et n'est plus activement développé.
Tout le matériel mis à jour et les annonces pour la série d'ateliers R du CSBQ se trouvent maintenant sur le [[https://r.qcbs.ca/fr/workshops/r-workshop-01/|site web de la série d'ateliers R du CSBQ]]. Veuillez mettre à jour vos signets en conséquence afin d'éviter les documents périmés et/ou les liens brisés.
Merci de votre compréhension,
Vos coordonnateurs de la série d’ateliers R du CSBQ.
======= Ateliers R du CSBQ =======
[[http://qcbs.ca/fr/|{{:logo_text.png?nolink&500|}}]]
Cette série de [[r|10 ateliers]] guide les participants à travers les étapes requises afin de maîtriser le logiciel R pour une grande variété d’analyses statistiques pertinentes en recherche en biologie et en écologie. Ces ateliers en libre accès ont été créés par des membres du CSBQ à la fois pour les membres du CSBQ et pour la grande communauté d’utilisateurs de R.
//Le contenu de cet atelier a été révisé par plusieurs membres du CSBQ. Si vous souhaitez y apporter des modifications, veuillez SVP contacter les coordonnateurs actuels de la série, listés sur la page d'accueil//
====== Atelier 1 : Introduction à R ======
Développé par : Sylvain Christin, Cédric Frenette Dussault, Dalal Hanna
**Résumé :** Durant cet atelier, vous apprendrez ce qu’est le logiciel d’analyse statistique R et vous découvrerai plusieurs raisons pourquoi vous devriez l’utiliser. Vous ferez vos premiers pas dans ce logiciel: Vous verrez comment R peut être utilisé comme une calculatrice, vous apprendrez ce qu’est un « objet » dans R, et vous utiliserez des fonctions simples. De plus, vous apprendrez comment télécharger de nouvelles fonctions et comment trouver des ressources d’aide pour utiliser R. Si tout ceci vous semble étrange, ne vous inquiétez pas! À la fin de cet atelier, vous comprendrez tous ces concepts.
**Lien vers la nouvelle [[https://qcbsrworkshops.github.io/workshop01/workshop01-fr/workshop01-fr.html#1|présentation Rmarkdown]]**
//S'il vous plaît essayez-la et dites aux coordonnateurs des ateliers R ce que vous en pensez!//
Lien vers l'ancienne [[http://prezi.com/8ckbtue5pgi4/csbq-atelier-r-1/|présentation Prezi]]
Téléchargez le [[https://github.com/QCBSRworkshops/workshop01/blob/dev/workshop01-fr/ReferenceScriptAtelier1.R|script]] requis pour cet atelier.
===== Installation de R et de R Studio =====
Avant de débuter cet atelier, vous devez installer les logiciels R et R Studio sur votre ordinateur personnel. Pour obtenir le logiciel R, rendez-vous au http://www.r-project.org/ et cliquez sur « Download ». Vous devez sélectionner un site miroir (préférablement un situé près de vous) et choisir votre plateforme (OS X, Windows ou Linux). Téléchargez le fichier et lancez-le afin de compléter l’installation. Vous pouvez garder les paramètres d’installation par défaut.
Pour installer R Studio, rendez-vous au http://www.rstudio.com/ et sélectionnez R Studio à partir de l’onglet « Products tab ». Cliquez sur la version en source libre (//i.e.// open source) du « R Studio Desktop » et sélectionnez votre plateforme pour le télécharger. Lancez le fichier d’installation afin de compléter l’installation. Encore une fois, vous pouvez garder les paramètres d’installation par défaut.
===== Objectifs d'apprentissage =====
- Comprendre ce que sont R et RStudio
- Utiliser R comme une calculatrice
- Manipuler les objets dans R
- Installer et utiliser les packages R
===== 1. Comprendre ce que sont R et RStudio =====
==== Qu'est-ce que R? ====
----
R est un langage de programmation [[https://fr.wikipedia.org/wiki/Open_source|open source]] conçu pour l'analyse statistique, l'exploration et la visualisation de données.
==== Pourquoi utiliser R? ====
----
* R est en source libre ! Ça signifie que ce logiciel est libre, gratuit et constamment mis à jour et amélioré.
* R est compatible avec la majorité des système d'exploitation, ce qui rend le partage de codes R facile. De plus, le langage R permet d'entrer en contact avec des gens de divers horizons à travers le monde et avec différents systèmes d'exploitation.
* R peut créer des tableaux, produire des graphiques et faire des analyses statistiques, le tout au sein du même logiciel. Avec R, il devient inutile d'utiliser plus d'un logiciel pour la gestion de vos données. Tout est possible avec un seul logiciel !
* De plus en plus de scientifiques utilisent R chaque année. Ses capacités sont en augmentation constante et vont continuer dans cette direction au fil des années. Cela signifie également qu'il y a une grande communauté en ligne qui peut vous donner un coup de main lorsque vous rencontrez un problème dans R.
{{::operating_systems.png?100|}} {{::open_source.png?200|}} {{::the_why_r_plot_2.png?400|}}
==== Utiliser RStudio ====
----
RStudio est un environnement de développement intégré pour R. Ça signifie que c'est un endroit où on peut utiliser le langage R, visualiser des tableaux et des figures et même réaliser une multitude d'analyses statistiques. Il est recommandé d'utiliser R Studio au lieu de la simple ligne de commande, car plusieurs options de visualisation et outils (que vous apprendrez au cours de cet atelier) sont disponibles avec RStudio.
----
== Défi 1 ==
Lancer RStudio
{{:logo_rstudio.jpg?200|R Studio logo}}
**Note pour les utilisateurs Windows**: si la restriction: "Unable to write on disk" apparaît quand vous ouvrez R Studio ou que vous installez une bibliothèque, fermer l'application. Cliqué avec le bouton droit de la souris sur l'icône R Studio et choisissez “Execute as administrator” pour ouvrir R Studio.
----
**La console**
Lorsque vous lancez RStudio, le premier élément que vous voyez à la gauche de l'écran est la console. C'est à cet endroit que vous allez travailler pour le reste de cet atelier d'introduction à R.
{{:Rstudioconsole_fleche.png?800|R Studio console}}
L'exemple suivant illustre le format du texte qui apparaît typiquement à l'écran :
> sortie
[1] "Ceci est la sortie"
Note 1: Il faut toujours appuyer sur "Entrée" pour lancer une commande dans la console.
Note 2: Les nouveaux utilisateurs de R se demandent souvent ce que les crochets devant la sortie représentent. Ils indiquent tout simplement la position des éléments de la sortie. Par exemple, si vous demandez à R d'afficher les nombres de 1 à 10 et que la sortie est sur deux lignes, les crochets au début de la deuxième ligne indiquent à quel élément on est rendu (le 6ième élément dans ce cas-ci).
[1] 1 2 3 4 5
[6] 6 7 8 9 10
===== 2. Utiliser R comme une calculatrice ======
La première chose à savoir à propos de la console R est qu'on peut l'utiliser comme calculatrice.
> 1 + 1
[1] 2
> 10 - 1
[1] 9
> 2 * 2
[1] 4
> 8 / 2
[1] 4
> 2^3
[1] 8
-----
== Défi 2 ==
Utilisez R pour effectuer l'opération suivante : 2 + 16 x 24 - 56
++Défi 2 : Solution| \\ ''> 2 + 16 * 24 - 56\\
[1] 330'' ++ \\
-----
== Défi 3 ==
Utilisez R pour effectuer l'opération suivante: \\
2 + 16 x 24 - 56 / ( 2 + 1) - 457
//Faites attention à la priorité des opérations!//
++Défi 3 : Solution| \\ ''> 2 + 16 * 24 - 56 / (2 + 1) - 457\\
[1] -89.66667'' ++ \\
Prenez note que R respecte //toujours// la priorité des opérations.
-----
**Truc R**
Utilisez les flèches "haut" et "bas" pour revenir à des commandes antérieures. Ces touches vous permettent de faire défiler l'historique des commandes. C'est un outil utile afin de vérifier si vous avez fait une erreur dans une commande. C'est également utile pour modifier rapidement une commande et la relancer d'une manière légèrement différente.
{{::arrow_keys.png?100|Utilisez les flèches pour revenir aux commandes précédentes.}}
-----
== Défi 4 ==
Quelle est l'aire d'un cercle avec un rayon de 5 cm ?
++Défi 4 : Solution| \\ Rappel : $A_{cercle} = \pi r^2$ \\ ''> 3.1416 * 5^2\\
[1] 78.54'' \\ ou \\ ''> pi * 5^2\\
[1] 78.53982''++ \\
===== 3. Manipuler les objets dans R =====
==== Objet ====
----
Jusqu’à maintenant, vous avez appris à utiliser R comme calculatrice afin d’obtenir différentes valeurs numériques. Cependant, si vous devez utiliser certaines valeurs ou calculs fréquemment, ça peut rapidement devenir ennuyeux de toujours devoir réécrire le même code dans la console. Le concept d’objet permet d’enregistrer certaines étapes afin de vous faire sauver du temps.
R est un langage de programmation par objet (//object-oriented programming language//). Ça signifie qu’on peut allouer un nom à des valeurs qu’on a créées afin de les enregistrer dans un espace de travail. Un objet est composé de trois parties : 1) une valeur d’intérêt, 2) un identifiant et 3) l’opérateur d’assignation.
- La valeur d’intérêt peut être à peu près de n’importe quelle nature : un nombre, le résultat d’un calcul, une chaîne de caractères, un tableau de données, un graphique ou une fonction.
- L’identifiant est le nom qui est assigné à la valeur d’intérêt. Lorsqu’on veut faire référence à cette valeur, il suffit simplement de taper son nom à la console et R va afficher cette valeur. Les identifiants peuvent seulement inclure des lettres, des chiffres, des points et des traits de soulignement (//underscore//). Ils doivent toujours débuter par une lettre.
- L’opérateur d’assignation ressemble à une flèche (''%%<-%%'') et est utilisé afin de lier la valeur d’intérêt à son identifiant.
Le code suivant illustre le concept d’objet :
#Commençons par créer un objet nommé moy_x.
#Le symbole # est utilisé dans R afin d’indiquer les commentaires à l’intérieur d’un code.
#Ces lignes ne sont pas traitées par R.
#C’est très important d’ajouter des commentaires à un code,
#car ça permet à d’autres personnes de mieux le comprendre et de l’utiliser.
moy_x <- (2 + 6) / 2
#En tapant le nom de l’objet dans la console, R retourne la valeur de l’objet.
moy_x
[1] 4
Dans cet exemple, ''(2 + 6) / 2'' est la valeur qu’on souhaite enregistrer en tant qu’objet. L’identifiant "moy_x" est assigné à cette valeur. En tapant ''moy_x'' à la console, R retourne la valeur du calcul (//i.e.// 4). Il faut être très scrupuleux lorsqu’on entre l’identifiant à la console, car R fait la différence entre les lettres minuscules et majuscules : écrire ''moy_x'' n’est pas la même chose qu’écrire ''MOY_X''. On peut voir que l’opérateur d’assignation ''%%<-%%'' crée un lien explicite entre la valeur d’intérêt et son identifiant. L’opérateur d’assignation pointe toujours de la valeur vers l’identifiant. Si votre clavier est configuré en anglais la combinaison de touche "Alt + - " vous permettra d'insérer directement l'opérateur ''%%<-%%''. Il est également possible d’utiliser le symbole d’égalité ''='' comme opérateur d’assignation, mais [[http://stackoverflow.com/questions/1741820/assignment-operators-in-r-and| c’est préférable de ne pas l’utiliser]]. Le symbole d’égalité est aussi utilisé pour d’autres opérations dans R, ce qui pourrait causer des problèmes lorsqu’on l’utilise comme opérateur d’assignation. Finalement, imaginez que l'opérateur ''%%<-%%'' et ''%%=%%'' ont une priorité d'opération :
> y <- x = 5
Error in y <- x = 5 : object 'y' not found
> y = x <- 5
> y
[1] 5
> x
[1] 5
----
=== Bonnes pratiques du code R ===
**Nom**:
* Essayez d'avoir des noms courts et explicites pour vos variables. Nommer une variable ''var'' n'est pas très instructif.
* Utilisez un trait de soulignement ''_'' pour séparer les mots d'un nom ou essayez d'être constant!
* Évitez les noms d'objets de fonction qui existe dans R (e.g. ''c'' ou ''table'')
**Espace**:
* Ajoutez des espaces autour de tous les opérateurs (''='', ''+'', ''-'', ''<-'', etc.) pour rendre le code plus lisible
* Mettez un espace après une virgule, mais jamais avant (comme en français).
-----
== Défi 5 ==
> Créez un objet avec une valeur de 1 + 1.718282 (//i.e.// le nombre d'Euler) et nommez le ''valeur_euler''.
++++
Défi 5 : Solution|
valeur_euler <- 1 + 1.718282
++++
-----
== Défi 6 ==
> Créez un objet (vous choisissez la valeur) avec un nom débutant par un chiffre. Que se passe-t-il?
++++
Défi 6 : Solution|
Un objet débutant par un chiffre va retourner l’erreur suivante :
''Symbole inattendu dans %%"%%votre nom d’objet%%"%%''.
++++
-----
**Truc R**
La touche « Tabulation » permet de compléter automatiquement les noms d’objets. Ça accélère l’entrée des commandes et ça évite les erreurs de frappe. Par exemple, si vous tapez ''val'' et appuyez sur « Tabulation » ensuite, vous allez voir une liste d’objets ou de fonctions débutant par ''val''. Sélectionnez ''valeur_euler'' (l’objet que vous venez de créer) et appuyez sur « Entrée ». L’identifiant ''valeur_euler'' apparaît maintenant dans la console.
==== Types de structures de données en R ====
-----
Le logiciel R est un outil très puissant pour l’analyse des données. Les données existent sous plusieurs formes, mais peuvent être regroupées en catégories distinctes. R classifie les données selon la nature des valeurs contenues dans un objet. La figure suivante illustre les types de données couramment rencontrés dans R.
{{ :: imageobjr.png?500 |Types d’objets dans R}}
Le premier type d’objet est le **vecteur**. C’est un des objets les plus communs dans R. Un vecteur est une entité constituée d’une liste de valeurs semblables. Toutes les valeurs d’un vecteur doivent avoir le même mode (ou classe). Les principaux modes dans R sont **numérique, caractère** et **logique**. Les vecteurs numériques sont composés de chiffres seulement. Les vecteurs de caractères sont généralement composés de chaînes de caractères ou d’un mélange de chaînes de caractères et de valeurs numériques et logiques. Il est absolument nécessaire d’utiliser les guillemets ''%%" "%%'' afin de délimiter les chaînes de caractères. Les vecteurs logiques sont composés des mots ''TRUE'' et ''FALSE'' seulement. Un vecteur composé d’un seul élément (généralement une constante) est appelé un vecteur atomique.
Avant d’apprendre à créer différents types de vecteurs, regardons comment un vecteur est créé de manière générique. Si vous vous rappelez ce que vous venez tout juste d’apprendre, vous devez premièrement avoir une valeur d’intérêt que vous voulez intégrer dans un vecteur et ensuite le lier à un identifiant avec l’opérateur d’assignation (//i.e.// créer un objet). Lorsque vous avez plus d’une valeur dans un vecteur, il est nécessaire d’indiquer au logiciel R qu’il faut regrouper ces valeurs au sein d’un même vecteur. Pour ce faire, il faut utiliser la fonction ''c()''. Ne vous en faites pas ! Vous allez bientôt apprendre ce qu’est une fonction dans une des sections suivantes. Pour l’instant, sachez que vous devez mettre vos valeurs que vous souhaitez avoir dans un vecteur entre parenthèses tout juste après la lettre ''c()'' dans la console de R. Le format est le suivant : ''nom.du.vecteur %%<-%% c(valeur1, valeur2, valeur3, ...)''. La fonction ''c()'' signifie combiner ou concaténer. C’est une fonction facile et très utile, alors rappelez-vous en !
Vous connaissez la méthode générique pour créer un vecteur dans R. Regardons maintenant comment générer différents types de vecteurs (//i.e.// de différents modes).
#Créez un vecteur numérique avec la fonction c (qui signifie combiner ou concaténer).
num_vecteur <- c(1, 4, 3, 98, 32, -76, -4)
#Créez un vecteur de caractères. N’oubliez pas les guillemets !
car_vecteur <- c("bleu", "rouge", "vert")
#Créez un vecteur logique ou booléen. N’utilisez pas les guillemets sinon R va considérer les éléments
#comme des chaînes de caractères.
bool_vecteur <- c(TRUE, TRUE, FALSE)
#C’est aussi possible d’utiliser les abréviations pour les vecteurs logiques.
bool_vecteur2 <- c(T, T, F)
-----
== Défi 7 ==
> Créez un vecteur comprenant les cinq premiers nombres impairs (en commençant par 1) et nommez ce vecteur "impair".
++++Défi 7 : Solution|
impair <- c(1, 3, 5, 7, 9)
++++
-----
**Truc R**
Utilisez la fonction ''dput()'' pour obtenir l'inverse, c'est-à-dire le contenue d'un objet sous forme de vecteur. Par exemple :
> impair <- c(1, 3, 5, 7, 9)
> impair
[1] 1 3 5 7 9
# La réponse que R retourne en inscrivant ''impair'' n’est pas directement utilisable
# (puisqu’elle n’est pas dans la fonction ''c()'' et les chiffres ne sont pas entourés de virgules).
> dput(impair)
c(1, 3, 5, 7, 9)
# La sortie peut être copiée et collée pour créer un nouvel objet en utilisant la fonction structure()
> structure(c(1, 3, 5, 7, 9))
[1] 1 3 5 7 9
Cette démonstration n’est peut-être pas convaincante, mais ces fonctions peuvent s’avérer fort utiles lors de la manipulation de données! Notamment si vous souhaitez fournir un exemple reproductible dans le cas d'une question sur [[https://stackoverflow.com/|Stack Overflow]], par exemple.
-----
Ce que vous avez appris dans la première section est également valide pour les vecteurs : les vecteurs peuvent être utilisés dans des calculs. La seule différence est que, lorsqu’un vecteur a plus d’un élément, l’opération est appliquée à tous les éléments du vecteur.
L’exemple suivant clarifie ceci.
#Créez deux vecteurs numériques.
> x <- 1:5
# Rappelez-vous que le symbole '':'', lorsqu’utilisé avec des chiffres, est l’opérateur de séquence.
# Ça indique à R de créer une série qui augmente de 1.
# C’est équivalent à écrire x <- c(1, 2, 3, 4, 5)
# Une autre façon équivalente est : x <- c(1:5).
> y <- 6
# Faisons la somme des deux vecteurs.
# 6 est ajouté à tous les éléments du vecteur x.
> x + y
[1] 7 8 9 10 11
# Multiplions x par y.
> x * y
[1] 6 12 18 24 30
----
Un autre type d’objet couramment utilisé en écologie est le data frame (c-à-d. tableau de données). Un data frame est un groupe de vecteurs de la même longueur (//i.e.// avec le même nombre d’éléments). Les variables sont toujours représentées en colonnes et les observations, cas, individus, sites ou répétitions sont toujours représentés en lignes. Un data frame peut être composé de plusieurs modes, mais une colonne doit toujours contenir le même mode. C’est sous ce format que la plupart des données écologiques sont enregistrées. L’exemple suivant présente un jeu de données fictif représentant quatre sites où le pH du sol et le nombre d’espèces ont été mesurés. On y trouve également une colonne de traitement (fertilisé ou non). Regardons plus en détail comment créer un tel tableau de données.
^ site_id ^ pH_sol ^ num_sp ^ traitement ^
| A1.01 | 5.6 | 17 | Fertilisé |
| A1.02 | 7.3 | 23 | Fertilisé |
| B1.01 | 4.1 | 15 | Non Fertilisé |
| B1.02 | 6.0 | 17 | Non Fertilisé |
N. B. Les noms des colonnes et leur contenu n'ont ni accent, ni d'espace, ni caractères spéciaux puisque R préfère une seule suite de caractères comme titre. Ainsi, num_sp représente bien 'Nombre d'espèces', mais R préfère la forme 'num_sp'. Il en va de même pour le contenu du tableau (pas 'Fertilisé', mais bien 'Fert').
# On commence par créer les vecteurs.
site_id <- c("A1.01", "A1.02", "B1.01", "B1.02")
pH_sol <- c(5.6, 7.3, 4.1, 6.0)
num_sp <- c(17, 23, 15, 7)
traitement <- c("Fert", "Fert", "Non_fert", "Non_fert")
# On peut grouper tous ces vecteurs en un data frame avec la fonction data.frame().
mon_df <- data.frame(site_id, pH_sol, num_sp, traitement)
# On l’affiche à la console!
mon_df
-----
**Truc R**
Voici la fonction ''dput()'' dans un exemple plus concret:
> dput(mon_df)
structure(list(site_id = c("A1.01", "A1.02", "B1.01", "B1.02"
), pH_sol = c(5.6, 7.3, 4.1, 6), num_sp = c(17, 23, 15, 7), traitement = c("Fert",
"Fert", "Non_fert", "Non_fert")), class = "data.frame", row.names = c(NA, -4L))
# Il est possible de reconstruire le data frame initial (avec certaines métadonnées associées, telles que la classe des variables par exemple) en copiant-collant la sortie précédente
> structure(list(site_id = c("A1.01", "A1.02", "B1.01", "B1.02"
), pH_sol = c(5.6, 7.3, 4.1, 6), num_sp = c(17, 23, 15, 7), traitement = c("Fert",
"Fert", "Non_fert", "Non_fert")), class = "data.frame", row.names = c(NA, -4L))
----
Les autres types d’objets pour stocker des données qu’on retrouve dans R sont les matrices, les tableaux (//i.e.// array en anglais) et les listes. Une matrice est très similaire à un data frame à l’exception que toutes les cellules de la matrice doivent être du même mode. Un array est similaire à une matrice, mais peut avoir plus de deux dimensions. Les arrays sont surtout utilisés pour des calculs avancés tels que des simulations numériques et des tests de permutations. Une liste est un groupement de plusieurs types d’objets différents. Par exemple, une liste pourrait comprendre un vecteur, un tableau de données et une matrice au sein du même objet.
==== Indexer des objets dans R ====
----
=== Indexer un vecteur===
Lorsqu’on tape le nom d’un objet dans la console, R retourne l’objet en entier. Par contre, ce n’est pas pratique si l’objet est, par exemple, une énorme base de données avec des millions de lignes. Ça peut rapidement devenir difficile d’identifier des éléments précis d’un objet. R nous permet d’extraire certaines parties d’un objet en indexant ce dernier. Il suffit de spécifier la position des valeurs à l’intérieur d’un objet qu’on souhaite extraire à l’aide des crochets ''[ ]''. Le code suivant illustre le concept d’indexation des vecteurs.
# Créons tout d’abord un vecteur numérique et un vecteur de caractères.
# Ce n’est pas nécessaire de faire cette étape si vous l’avez déjà fait dans un exercice précédent.
> impair <- c(1, 3, 5, 7, 9)
# Extrayons le deuxième élément du vecteur numérique.
> impair[2]
[1] 3
# Extrayons les 2ème et 4ème éléments du vecteur numérique.
> impair[c(2, 4)]
[1] 3 7
# Extrayons tous les éléments du vecteur numérique sauf les deux premières.
> impair[c(-1, -2)]
[1] 5 7 9
# Si nous sélectionnons une position qui n'existe pas dans le vecteur numérique.
impair[c(1,6)]
[1] 1 NA
# Il n’y a pas de sixième valeur dans ce vecteur, donc R retourne une valeur nulle (i.e. NA).
# NA signifie 'Not available'.
# Nous pouvons également utiliser des conditions pour sélectionner des valeurs.
> impair[impair > 4]
[1] 5 7 9
# Nous pouvons procéder de même sur les vecteurs de caractère
# Extraire tous les éléments correspondant exactement à « bleu » du vecteur de caractères.
# Prenez note de l’utilisation du double signe d’égalité ==.
> car_vecteur[car_vecteur == "bleu"]
[1] "bleu"
-----
== Défi 8 ==
> a) Extraire la quatrième valeur du vecteur numérique num_vecteur.
> b) Extraire les première et troisièmes valeurs du vecteur numérique num_vecteur.
> c) Extraire toutes les valeurs du vecteur numérique num_vecteur à l’exception des deuxième et quatrième valeurs.
>
++++Défi 8a : Indexer des vecteurs|
> num_vecteur[4]
[1] 98
++++
++++Défi 8b : Indexer des vecteurs|
> num_vecteur[c(1,3)]
[1] 1 3
++++
++++Défi 8c : Indexer des vecteurs|
> num_vecteur[c(-2,-4)]
[1] 1 3 32 -76 -4
++++
-----
== Défi 9 ==
>Explorez la différence entre ces deux lignes de codes :
> car_vecteur == "bleu"
> car_vecteur[car_vecteur == "bleu"]
++++Défi 9 : Différences entre codes|
La première ligne de code évalue une déclaration logique. Pour chaque élément du vecteur ''car_vecteur'', R vérifie si cet élément est exactement égal à « bleu » ou non et retourne une réponse (TRUE ou FALSE). La prochaine sous-section présente une brève introduction aux déclarations logiques. La deuxième ligne de code demande à R d’extraire tous les éléments à l’intérieur du vecteur ''car_vecteur'' qui sont exactement égaux à « bleu ». Il est également possible d'extraire la valeur « bleu » en attribuant une valeur logique à chaque valeur du vecteur. Pour cela, il faut bien sûr connaître la position de la valeur « bleu » à l'intérieur du vecteur.
car_vecteur[c(TRUE, FALSE, FALSE)]
# On spécifie ici que la première valeur est "vraie",
# c'est-à-dire qu'on souhaite que R nous retourne la première valeur
# du vecteur car_vecteur, soit "bleu".
++++
-----
=== Indexer un data frame ===
L’indexation des data frames est similaire à celle des vecteurs, mais il est généralement nécessaire de spécifier deux dimensions : le numéro de ligne et de colonne. Pour ce faire, la syntaxe dans R est :
''data frame[numéro de ligne, numéro de colonne]''.
Voici quelques exemples d’indexation de data frames. Prenez note que les quatre premières opérations sont également valides pour les matrices.
# Réutilisons le data frame créé précédemment (mon_df)
# Extrayons la première ligne du data frame.
> mon_df[1, ]
# Extrayons la troisième colonne du data frame.
> mon_df[, 3]
# Notez qu'un index vide sélectionne toutes les valeurs
# Extrayons le deuxième élément de la quatrième colonne du data frame.
> mon_df[2, 4]
# Extrayons les lignes 2 et 4 du data frame.
> mon_df[c(2,4), ]
# Extrayons la colonne « site_id » en référant directement à son nom.
# Le signe de dollar ($) permet une telle opération !
> mon_df$site_id
# Extrayons la deuxième valeur de la colonne « site_id »
> mon_df$site_id[2]
# Extrayons les variables « site_id » et « pH_sol ».
> mon_df[,c("site_id","pH_sol")]
-----
=== Un bref commentaire sur les déclarations logiques ===
R permet de tester les déclarations logiques, i.e. tester si une déclaration est vraie ou fausse. Vous devez utiliser des opérateurs logiques pour cela.
^ Opérateur ^ Description ^
| < | plus petit que |
| %%<=%% | plus petit ou égal à |
| > | plus grand que |
| >= | plus grand ou égal à |
| == | exactement égal à |
| != | pas égal à |
| x %%|%% y | x OU y |
| x & y | x ET y |
Les exemples suivants illustrent comment utiliser ces opérateurs de manière appropriée.
# Commençons par créer deux vecteurs à comparer.
> x2 <- c(1:5)
> y2 <- c(1, 2, -7, 4, 5)
# Vérifions si les éléments de x2 sont plus grand ou égaux à 3.
# R retourne une valeur TRUE/FALSE pour chaque élément (dans le même ordre que x2).
> x2 >= 3
[1] FALSE FALSE TRUE TRUE TRUE
# Vérifions si les éléments de x2 sont exactement égaux à ceux de y.
> x2 == y2
[1] TRUE TRUE FALSE TRUE TRUE
# Est-ce que 3 n’est pas égal à 4? Bien sûr!
> 3 != 4
[1] TRUE
# Vérifions quels éléments de x2 sont plus grands que 2, mais plus petits que 5.
# Il faut réécrire x2 deux fois pour que ça fonctionne!
> x2 > 2 & x2 < 5
[1] FALSE FALSE TRUE TRUE FALSE
# Écrire x2 > 2 & < 5 va retourner une erreur !
\\
-----
== Défi 10 ==
> a) Extrayez la colonne « num_sp » du tableau ''mon_df'' et multipliez-la par les quatre premières valeurs du vecteur ''num_vecteur''.\\
> b) Ensuite, écrivez une déclaration logique qui vérifie si chaque valeur obtenue est supérieure à 25. Référez-vous au défi 9 pour compléter cette question.\\
>
++++ Défi 10a : Indexer et multiplier|
> mon_df$num_sp * num_vecteur[c(1:4)]
[1] 17 92 45 686
# Ou encore
> mon_df[, 3] * num_vecteur[c(1:4)]
[1] 17 92 45 686
++++
++++ Défi 10b : Déclaration logique|
> (mon_df$num_sp * num_vecteur[c(1:4)]) > 25
[1] FALSE TRUE TRUE TRUE
++++
==== Les fonctions ====
----
La plupart du temps, vous devrez utiliser des fonctions dans R pour effectuer les tâches voulues.
Les fonctions sont des outils qui permettent de simplifier l'utilisation de R. Elles permettent d'exécuter des opérations sur des objets sans avoir à spécifier chaque étape. Les fonctions sont des codes pré-existants dans R qui sont exécutés lorsque nécessaire. Ça permet de sauver du temps, car il n'est pas nécessaire de créer un code et de l'écrire à chaque fois qu'on doit l'utiliser.
Pour exécuter une fonction, vous devez l'__appeler__. L'appel d'une fonction est un raccourci vers le code de la fonction. Pour ce faire, il est nécessaire de spécifier des valeurs d'entrée qu'on nomme **arguments** (ou quelquefois paramètres). Après avoir lancé une fonction, R retourne une **valeur de retour** dans la console. La commande doit être structurée proprement en suivant les "règles de grammaire" du langage R (//i.e.// la syntaxe).
Un appel de fonction est structuré de la manière suivante : le nom de la fonction suivi de parenthèses ''( )''. On insère les arguments séparés par des virgules à l'intérieur des parenthèses :
''//nom_de_la_fonction//**(**arg1**,** arg2**, ...)**''
Voyons l'exemple de la fonction ''sum'' qui permet de faire la somme de deux ou plusieurs nombres.
> sum(1, 2)
[1] 3
Les arguments sont des **valeurs** utilisées comme instructions pour que la fonction puisse retourner un résultat.
Les objets peuvent être utilisés comme arguments :
> a <- 3
> b <- 5
> sum(a, b)
[1] 8
La sortie, qui apparaît sur la dernière ligne, est la **valeur de retour** de la fonction. Dans ce cas-ci, c'est la somme de ''a'' et ''b'', soit 8.\\
-----
== Défi 11 ==
> a) - Créez un vecteur nommé ''a'' contenant tous les nombres de 1 à 5\\
> - Créez un objet nommé ''b'' avec une valeur de 2\\
> - Ajoutez a à b en utilisant l'opérateur ''+'' et enregistrez le résultat dans un objet appelé ''resultat_add''\\
> - Ajoutez a à b en utilisant la fonction ''sum()'' et enregistrez le résultat dans un objet appelé ''resultat_sum''\\
> - Comparez les objets resultat_add et resultat_sum. Sont-ils différents?
>
> b) Ajoutez 5 à ''resultat_sum'' en utilisant la fonction ''sum()''.
>
++++Défi 11a : Appeler des fonctions|
> a <- 1:5
> b <- 2
> resultat_add <- a + b
> resultat_sum <- sum(a, b)
> resultat_add
[1] 3 4 5 6 7
L'opération sur le vecteur ajoute deux à chaque élément. Le résultat est un **vecteur**. \\
> resultat_sum
[1] 17
La fonction ''sum()'' additionne toutes les valeurs de ''a'' et ''b''. C'est équivalent à 1 + 2 + 3 + 4 + 5 + 2. Le résultat est un **nombre**.\\
++++
++++Défi 11b : Appeler des fonctions|
> sum(resultat_sum, 5)
[1] 22
++++
-----
=== Arguments ===
Tous les arguments ont un **nom** qui peut être indiqué lorsqu'on appelle une fonction.\\
Si le nom n'est pas __indiqué__, l'ordre des arguments __est primordial__.\\
Si le nom est __indiqué__, l'ordre des arguments __n'a pas d'importance__.
Pour indiquer le nom d'un argument lors d'un appel de fonction, il suffit simplement de l'écrire de la façon suivante : ''nom_argument=valeur''.
> log(x = 8, base = 2)
-----
== Défi 12 ==
> ''plot(x, y)'' est une fonction qui crée un graphique de y en fonction de x. Cette fonction nécessite deux arguments nommés ''x'' et ''y''. Quelles sont les différences entre les lignes de codes suivantes ?
> a <- 1:100
> b <- a^2
> plot(a, b)
> plot(b, a)
> plot(x = a, y = b)
> plot(y = b, x = a)
++++Défi 12 : Noms d'arguments|
plot(a, b)
{{::rplot.png?200|}}\\
Crée un graphique de ''b'' en fonction de ''a''.
plot(b, a)
{{:plotba.png?200|}}\\
Crée un graphique de ''a'' en fonction de ''b''. Les noms d'arguments ne sont pas indiqués, donc l'ordre des arguments est primordial.
plot(x = a, y = b)
{{:pltxayb.png?200|}}\\
Crée un graphique de ''b'' en fonction de ''a''. C'est le même graphique que ''plot(a, b)''.
plot(y = b, x = a)
{{:plotybxa.png?200|}}\\
Crée un graphique de ''b'' en fonction de ''a''. Les noms d'arguments sont indiqués, donc l'ordre des arguments n'a pas d'importance.
++++
-----
À titre de référence, voici une liste de fonctions couramment utilisées dans R :
sqrt, log, exp, max, min, sum, mean, sd, var, summary, plot, par, paste, format,
head, length, str, names, typeof, class, attributes, library, ls, rm, setwd, getwd, file.choose,
c, seq, rep, tapply, lapply, aggregate, merge, cbind, rbind, unique,
help (or ?), help.search (or ??), help.start
===== 4. Installer et utiliser les packages R =====
==== Package ====
----
Les packages (//paquets// pour être rigoureux) sont des regroupements de fonctions et de jeux de données partageant un thème similaire, //e.g.// statistiques, analyse spatiale, visualisation...
Tout le monde peut développer des packages et les rendre disponibles aux autres utilisateurs de R.
Les packages sont généralement disponibles via le //Comprehensive R Archive Network// (CRAN)[[http://cran.r-project.org/web/packages/]].
Actuellement, plus de 16000 packages sont disponibles librement.
Pour installer des packages dans R, il suffit d'utiliser la fonction ''install.packages()'' :
> install.packages("ggplot2")
Il est nécessaire d'installer un package une seule fois, même si des mises à jours régulières sont recommandées. Cependant, pour utiliser une fonction se trouvant au sein d'un package, il ne suffit pas de simplement installer le package. Il faut également utiliser la fonction ''library()'' à chaque début de session R pour "charger" le package. Voici un exemple qui utilise la fonction ''qplot()'' du package **ggplot2** que l'on vient tout juste d'installer.
> qplot(1:10, 1:10)
Le package a été installé correctement, mais il n'a pas été chargé. Par conséquent, l'exécution de ce code cause l'erreur suivante :
''Erreur: impossible de trouver la fonction "qplot"''
Pour utiliser la fonction ''qplot()'', il faut charger le package ''ggplot2'' avant d'appeler cette fonction.
> library("ggplot2")
> qplot(1:10, 1:10)
La fonction peut maintenant être trouvée par R et l'exécution de cette fonction retourne le graphique suivant :
{{::qplot.png?200|}}
Il est de bon usage de décharger les packages une fois que l'on a fini de les utiliser car ils pourraient entrer en conflit avec d'autres packages. Le déchargement est effectué avec la fonction ''detach()'' et en spécifiant qu'il s'agit d'un package:
> detach(package:ggplot2)
==== Obtenir de l’aide ====
-----
=== Recherche de fonctions ===
Nous avons vu jusqu'à maintenant que R est un outil très puissant et comporte de nombreuses fonctions. Parmi ces fonctions, il y en a probablement une qui vous permet d'effectuer une tâche que vous devez compléter.
Par contre, il n'est pas toujours facile de savoir quelle fonction utiliser pour une tâche précise. Comment trouver la bonne ?
Pour trouver une fonction pouvant réaliser une action spécifique, il faut utiliser l'opérateur ''??'' ou la fonction ''help.search()''. Pour effectuer une recherche, tapez ''??'' suivi d'un terme relié à votre recherche. Par exemple, supposons que l'on souhaite créer une séquence de nombres pairs entre 0 et 10. On effectue une recherche avec le terme **sequence** :
> ??sequence
Cette commande ouvre la fenêtre suivante :
{{::sequence_help.png?400|}}\\
**Note** : les résultats d'une recherche dépendent des packages installés sur votre ordinateur.
Les résultats de la recherche comportent deux colonnes :
* À gauche, on retrouve les noms du package et de la fonction sous le format : ''**nom_du_package**:://nom_de_la_fonction//''.
* À droite, on retrouve la description des fonctions.
Généralement, les fonctions portent un nom qui est représentatif de ce qu'elles font. C'est plus facile de les trouver. Rappelez-vous de ceci si jamais vous décidez d'écrire vos propres fonctions !
Dans le cas présent, le résultat qui nous intéresse est ''base::seq'', //i.e.// la fonction ''seq'' qui se trouve dans le package ''base'' qui permet de générer des séquences.\\
**Note** : Le package ''base'' comporte des fonctions de base qui se chargent automatiquement lorsqu'on lance R. Elles sont donc toujours disponibles.
-----
=== Aide pour les fonctions ===
Utilisons la fonction ''seq()'' afin de générer notre séquence de nombres pairs. Pour l'instant, nous ne savons rien de cette fonction. Comment fonctionne-t-elle ? Comment l'utiliser ?
Pour répondre à ces questions, il faut accéder à la page d'aide de cette fonction. Pour ce faire, il faut utiliser l'opérateur ''?'' ou la fonction ''help()'' de la manière suivante : ''?//nom_de_la_fonction//''
Voici un exemple pour la fonction ''seq()'' :
> ?seq
Cette commande ouvre la page suivante :
{{ ::seq.png?600 |}}\\
Une page d'aide contient généralement les sections et éléments suivants :
(**Note** : parfois, une même page d'aide est utilisée pour plus d'une fonction.)
* Dans le coin supérieur gauche, les noms de la fonction et du package dans lequel elle se trouve sont indiqués dans le format suivant : ''//fonction// {**package**}''.
* **Description**: Une brève description de la fonction.
* **Usage**: Explique comment utiliser la fonction, en particulier quels sont les noms et l'ordre des arguments. Si une valeur est spécifiée pour un argument, ça signifie que c'est la valeur par défaut de cet argument et qu'il est facultatif de l'inclure dans notre commande. Si l'argument est manquant, la valeur par défaut sera utilisée. Par exemple, si on ne spécifie pas l'argument ''from'' pour la fonction ''seq()'', la séquence débutera automatiquement par **1**.
* **Arguments**: Une description détaillée de tous les arguments et de ce qui est attendu ou requis pour que la fonction soit utilisée correctement. Portez attention à cette section ! C'est une liste de tous les arguments pour toutes les fonctions et non une liste d'arguments pour une fonction donnée. Par exemple, dans l'image ci-dessus, les arguments ''from'' et ''to'' ne sont pas disponibles pour la fonction ''seq_along()''.
* **Détails**: Fournit une description détaillée du fonctionnement de la fonction. Des cas spécifiques peuvent être discutés ici en plus de fournir des informations supplémentaires.
* **Valeur**: Explique les valeurs de retour de la fonction.
* **Références**: Les sources utilisées comme base de la fonction ou des lectures intéressantes sur le sujet.
* **Voir aussi**: Une liste de fonctions connexes pouvant parfois être utiles, spécialement lorsqu'on cherche la fonction appropriée à nos besoins.
* **Exemples**: Quelques exemples d'utilisation de la fonction.
-----
== Défi 13 ==
> a) Créez une séquence de nombres pairs de 0 à 10 en utilisant la fonction ''seq()''.
>
> b) - Créez un vecteur de vos nombres préférés sans qu'il ne soit en ordre croissant ou décroissant.
> - Trouvez comment mettre ce vecteur en ordre en tapant ''?sort'' à la console.
> - Ordonnez votre vecteur en ordre décroissant.
++++ Défi 13a |
> seq(from = 0, to = 10, by = 2)
[1] 0 2 4 6 8 10
Nous aurions également pu écrire :
> seq(0, 10, 2)
[1] 0 2 4 6 8 10
++++
++++ Défi 13b |
> nombres <- c(2, 4, 22, 6, 26)
sort(nombres, decreasing = TRUE)
[1] 26 22 6 4 2
++++
-----
=== Obtenir de l’aide sur le web ===
Généralement, la meilleure source d'information sur R provient d'un moteur de recherche (Google, Bing, Yahoo, etc.).
Voici quelques conseils pour une recherche efficace :
* Faites vos recherches en anglais.
* Utilisez le mot-clé "R" au début de votre recherche.
* Définissez précisément ce que vous cherchez.
* Apprenez à lire les discussions sur les forums. Il y a de fortes chances que d'autres utilisateurs aient eu le même problème avant vous. Créez-vous un compte sur les forums où les questions concernant R sont souvent posées comme [[http://stats.stackexchange.com|stackexchange]].
* N'hésitez pas à faire des recherches avec des mots-clés différents!
-----
== Défi 14 ==
>Trouvez la fonction appropriée pour effectuer les opérations suivantes :
>
> a) Calculer la racine carrée d'un nombre
> b) Calculer la moyenne de nombres
> c) Combiner des tableaux de données par colonne (//i.e.// un par-dessus l'autre)
> d) Faire une liste de tous les objets de la session
++++ Défi 14 |
a) ''sqrt'' \\
b) ''mean'' \\
c) ''cbind'' \\
d) ''ls'' \\
++++
===== Ressources additionnelles =====
=== Aides mémoire (//cheat sheets//)===
[[https://www.rstudio.com/resources/cheatsheets/|https://www.rstudio.com/resources/cheatsheets/]]
Ces aides-mémoires sont aussi disponible directement dans RStudio (Help -> Cheat Sheets)
----
=== Quelques livres ==
* R for Dummies
* A Handbook of Statistical Analyses using R
* R in Action
* Introductory Statistics in R
* A Beginner's Guide to R
* The R Book
----
=== Quelques sites internet ===
* [[http://r4ds.had.co.nz/index.html|http://r4ds.had.co.nz/index.html]]
* [[https://cran.r-project.org/doc/manuals/r-release/R-intro.html|https://cran.r-project.org/doc/manuals/r-release/R-intro.html]]
* [[http://cran.r-project.org/doc/contrib/Baggott-refcard-v2.pdf|http://cran.r-project.org/doc/contrib/Baggott-refcard-v2.pdf]]
* [[http://statmethods.net/|http://statmethods.net/]]
* [[https://support.rstudio.com/hc/en-us/categories/200035113-Documentation|https://support.rstudio.com/hc/en-us/categories/200035113-Documentation]]
* [[http://cookbook-r.com/|http://cookbook-r.com/]]
==== Script R ====
-----
Pour réviser ou pratiquer cet atelier:
[[{}{ wiki:workshop01-fr.r }|Télécharger le script R]]