R peut être utilisé comme une simple calculatrice!
3 * 4
## [1] 12
13/3
## [1] 4.333333
3^3
## [1] 27
On peut également assigner des objets à des symboles avec l’opérateur <- et concaténer des nombres ensemble pour créer un vecteur, un objet à 1 dimension. Par la suite, on peut effectuer des opérations vectorisées.
v1 <- c(1, 2, 3, 4, 5, 6, 7, 8, 9)
v1
## [1] 1 2 3 4 5 6 7 8 9
v2 <- c(10, 10, 10, 10, 10, 10, 10, 10, 10)
v1 + v2
## [1] 11 12 13 14 15 16 17 18 19
v1 * v2 + 1
## [1] 11 21 31 41 51 61 71 81 91
On peut aussi coller ces deux vecteurs ensembles pour créer une matrice (matrix), un objet à 2 dimension.
m <- cbind(v1, v2) #! Colle deux vecteurs ensemble
m
## v1 v2
## [1,] 1 10
## [2,] 2 10
## [3,] 3 10
## [4,] 4 10
## [5,] 5 10
## [6,] 6 10
## [7,] 7 10
## [8,] 8 10
## [9,] 9 10
Une matrice est composée d’un même type de valeur, soit numérique, caractète ou logique. Plus général, un data.frame peut contenir plusieurs types de valeurs. C’est l’équivalent d’un tableau de données dans Excel.
d <- data.frame(v1, v2, z = c("a", "b", "c", "d", "e", "f", "g", "h", "i"))
d
## v1 v2 z
## 1 1 10 a
## 2 2 10 b
## 3 3 10 c
## 4 4 10 d
## 5 5 10 e
## 6 6 10 f
## 7 7 10 g
## 8 8 10 h
## 9 9 10 i
Les listes peuvent contenir tout type d’objets et sont des objets à une dimension.
l <- list(v1, m, d)
l
## [[1]]
## [1] 1 2 3 4 5 6 7 8 9
##
## [[2]]
## v1 v2
## [1,] 1 10
## [2,] 2 10
## [3,] 3 10
## [4,] 4 10
## [5,] 5 10
## [6,] 6 10
## [7,] 7 10
## [8,] 8 10
## [9,] 9 10
##
## [[3]]
## v1 v2 z
## 1 1 10 a
## 2 2 10 b
## 3 3 10 c
## 4 4 10 d
## 5 5 10 e
## 6 6 10 f
## 7 7 10 g
## 8 8 10 h
## 9 9 10 i
matrix) (2 dimensions, 1 type de données)list)(1 dimension, tout type d’objets)array (3 dimension, un type de données)Les principaux types de données ou de valeurs dans R sont:
class(1)
class("allo")
class(TRUE)
## [1] "numeric"
## [1] "character"
## [1] "logical"
Tout ce qui est contenu dans une session R est un objet qui porte un nom. Lorsque l’on modifie un objet, il faut se rappeler d’assigner le résultat afin de le conserver dans le même objet ou dans un nouvel objet. Par exemple, affichons le contenu de v1:
v1
## [1] 1 2 3 4 5 6 7 8 9
Maintenant, ajoutons une valeur à v1:
v1 + 100
## [1] 101 102 103 104 105 106 107 108 109
Le résultat s’affiche, mais l’objet n’a toujours pas changé:
v1
## [1] 1 2 3 4 5 6 7 8 9
L’objet v1 n’a toujours pas changé, car il faut assigner le résultat à un nouvel objet ou à l’objet v1 en “écrasant” l’ancien objet v1.
v1 <- v1 + 100
v1
## [1] 101 102 103 104 105 106 107 108 109
Tout ce qui est contenu dans une session R est un objet qui porte un nom.
L’indexation est le processus par lequel on accède aux données à l’intérieur d’un objet. Pour ce faire, on utilise généralement les opérateurs [ et $ avec différentes conditions pour établir notre sélection.
v1
## [1] 101 102 103 104 105 106 107 108 109
On accède au 3e élément du vecteur.
v1[3]
## [1] 103
On accède à tous les éléments supérieurs à 105.
v1[v1 > 105]
## [1] 106 107 108 109
On accède à tous les éléments supérieurs à 105 et inférieurs ou égal à 108.
v1[v1 > 105 & v1 <= 108]
## [1] 106 107 108
data.frameUn data.frame est un objet en 2 dimensions qui contient des lignes et des colonnes d[i, j].
d
## v1 v2 z
## 1 1 10 a
## 2 2 10 b
## 3 3 10 c
## 4 4 10 d
## 5 5 10 e
## 6 6 10 f
## 7 7 10 g
## 8 8 10 h
## 9 9 10 i
On sélectionne les lignes 4 à 6 du data.frame.
d[4:6, ]
## v1 v2 z
## 4 4 10 d
## 5 5 10 e
## 6 6 10 f
On sélectionne les colonnes 1 et 3 du data.frame.
d[, c(1, 3)]
## v1 z
## 1 1 a
## 2 2 b
## 3 3 c
## 4 4 d
## 5 5 e
## 6 6 f
## 7 7 g
## 8 8 h
## 9 9 i
On sélectionne la colonne nommée z.
d$z
## [1] a b c d e f g h i
## Levels: a b c d e f g h i
On sélectionne toutes les lignes où v1 est supérieur à 7.
d[d$v1 > 7, ]
## v1 v2 z
## 8 8 10 h
## 9 9 10 i
Avec les “[” simples, on accède aux éléments de la liste qui sont aussi retournés sous forme de liste.
l[1]
## [[1]]
## [1] 1 2 3 4 5 6 7 8 9
Avec les doubles “[[”, on accède directement à un seul élément contenu dans la liste.
l[[1]]
## [1] 1 2 3 4 5 6 7 8 9
On peut également accéder aux éléments de la liste par leur nom si cette liste est nommée.
l$v1
## NULL
Puisque la liste n’est pas nommée, la valeur NULL nous est retournée.
names(l) <- c("allo", "bonjour", "bye")
l$bye
## v1 v2 z
## 1 1 10 a
## 2 2 10 b
## 3 3 10 c
## 4 4 10 d
## 5 5 10 e
## 6 6 10 f
## 7 7 10 g
## 8 8 10 h
## 9 9 10 i
On retrouve également dans R des objets qui sont des fonctions. Les fonctions peuvent être appliquées à des objets pour obtenir des résultats. On applique les fonctions aux objets en utilisant les parenthèses (), contrairement aux crochets [] qui servent à l’indexation. Par exemple, c est une fonction qui permet de coller des valeurs ensembles dans un vecteur.
temp <- c(37, 54, 79, 23, 3, 101, 4)
La fonction mean permet de calculer des moyennes et la fonction sd des écarts-types.
mean(temp)
sd(temp)
## [1] 43
## [1] 37.27823
La fonction rep permet de répéter des valeurs. Ici, on répète le vecteur 1:2 5 fois.
rep(1:3, times = 5)
## [1] 1 2 3 1 2 3 1 2 3 1 2 3 1 2 3
Ceci permet d’introduire les arguments qui composent les fonctions. On pourrait aussi utiliser l’argument length.out ou each pour modfifier la façon dont les valeurs sont répétées.
rep(1:3, each = 5)
rep(1:3, length.out = 5)
## [1] 1 1 1 1 1 2 2 2 2 2 3 3 3 3 3
## [1] 1 2 3 1 2
En général, la majorité des arguments d’une fonction ont des valeurs par défaut. Par exemple, les valeurs par défaut de rep sont times = 1.
rep(1:3)
## [1] 1 2 3
Par défaut, le premier élément listé à l’intérieur d’une fonction est l’objet auquel on veut l’appliquer et correspond au premier argument de la fonction. Cet argument n’a généralement par besoin d’être nommé. Par contre, il est souvent préférable ou nécessaire de nommer les éléments suivants. Si ceux-ci ne sont pas nommés, l’ordre dans lequel ils sont donnés sera utilisé pour les associer aux arguments correspondants.
Certaines fonctions sont représentées par des opérateurs. En voici quelques exemples.
3 == 4 # égal
3 + 4 # addition
TRUE & TRUE # 'et' logique
TRUE & FALSE # 'et' logique
3 == 4 | 3 == 5 # 'ou' logique
c(3, 4) %in% c(4, 5, 6, 7) # élément du vecteur 1 dans le vecteur 2?
3:10 # crée un vecteur avec tous les entiers de 3 à 10
## [1] FALSE
## [1] 7
## [1] TRUE
## [1] FALSE
## [1] FALSE
## [1] FALSE TRUE
## [1] 3 4 5 6 7 8 9 10
Dès que l’on se met à jouer avec R, on est vite obligé d’aller inspecter son fichier d’aide. Ceci peut être tout aussi éclairant que frustrant! Mais c’est généralement éclairant et absolument essentiel. Pour accéder à l’aide sur la fonction rep, on n’a qu’à taper ?rep.
Cette section contient une courte description de ce que fait la fonction.
Cette section montre comment la fonction est utilisée et liste également la plupart du temps les valeurs par défaut des arguments.
Cette section explique l’utilisation de chacun des arguments de la fonction et donne également les valeurs par défaut.
Cette section donne parfois des détails plus précis par rapport à l’utilisation de la fonction.
Cette section décrit la valeur retournée par la fonction.
Cette section donne des suggestions concernant d’autres fonctions jouant un rôle similaire.
Cette section très utile donne des exemples d’utilisation de la fonction. Ces exemples peuvent être copiés et collés directement dans votre session R afin d’étudier l’utilisation de la fonction. Pour bien comprendre l’utilisation d’une fonction, cette section n’est pas à négliger!
Lorsqu’on débute avec R, c’est souvent à cette première étape cruciale qu’on a des problèmes! Premièrement, R travaille dans un seul dossier à la fois, c’est-à-dire que la base de données doit être dans le bon dossier, appelé répertoire courant. Pour dire à R quel est ce dossier, on va dans RStudio sous l’onglet Session/Set Working Directory. On doit généralement faire cette opération à chaque début de session de travail dans R, à moins que RStudio s’ouvre par défaut au bon endroit. On peut également inspecter le répertoire courant à l’aide de la fonction getwd.
getwd()
## [1] "U:/2018/2018/Ateliers"
Pour s’assurer que notre base de données se trouve bien à cet endroit, on peut utiliser la fonction list.files.
list.files()
## [1] "atelier1.html" "atelier1.Rmd" "rsconnect" "sparrows.txt"
NA)Avant d’importer des données, il est nécessaire d’aborder la gestion des données manquantes par R. Les données manquantes sont toujours représentées par des NA, que ce soit dans les vecteurs ou dans les tableaux de données. Lorsqu’on veut importer des données avec des cellules vides, il est souvent nécessaire de remplacer les cellules vides par des NA. Parfois, il est possible de dire à une éventuelle fonction que les cellules vides correspondent à des NA.
Il existe plusieurs méthodes pour importer des données dans R. La façon classique est par l’intermédiaire de la fonction read.table. Cette fonction prend des fichiers textes (.txt) qui doivent répondre à plusieurs critères:
Il ne doit y avoir aucun espace dans les noms des différentes variables et dans les éléments de la base de données. Par exemple, « bon à modéré » va créer des problèmes. On devrait plutôt écrire “bon.à.modéré” ou “bon_à_modéré”. Encore mieux serait d’éviter les accents ou d’utiliser un code.
AUCUNE cellule ne doit être vide. Si une cellule est vide ou si on a écrit un commentaire au lieu d’un nombre, on écrit NA dans la cellule. Autrement, R produira un message d’erreur puisqu’il considérera qu’une ligne du tableau est incomplète.
Il faut généralement utiliser le point plutôt que la virgule pour les nombres décimaux (à moins de le spécifier dans les arguments)
Les messages d’erreurs sont pratiquement obligatoires lors de l’importation d’une nouvelle base de données. Il s’agit juste d’être en mesure de bien les interpréter et d’observer ces quelques règles de base.
Plusieurs autres fonctions sont disponibles selon le format des données (read.delim, read.csv, etc.). Le format .csv est souvent le plus pratique, car il réduit les risques de problèmes lors de l’importation en raison de la délimitation des cellules. Il est également possible d’utiliser le package readxl pour lire directement des fichiers .xlsx. Bien qu’étant la façon classique d’importer des données, la fonction read.table est assez capricieuse… On peut également exporter des données avec la fonction write.table.
Les packages sont des banques de fonctions destinées à des tâches spécifiques. Plusieurs packages de bases sont installés avec R, mais il existe plusieurs milliers de packages de toutes sortes. Pour installer un package donné sur son ordinateur (par exemple le package spatstat, pour les statistiques spatiales), on utilise la fonction install.packages de cette façon :
install.packages("spatstat")
Dépendamment des versions de R, on demande parfois de sélectionner un miroir CRAN à partir duquel le téléchargement sera fait. Une fois le package installé, il faut activer le package dans notre session de travail R. Pour les packages spéciaux qui ne font pas partie des packages de base de R, on doit les activer à chaque session de travail avec la fonction library
library("spatstat")
Il est fréquent d’utiliser une fonction dans R sans avoir préalablement charger le package la contenant. Dans ce cas, un message d’erreur nous dit que la fonction utilisée n’existe pas. Ceci peut également résulter d’une mauvaise orthographe de la fonction.
Ce premier exercice consiste à importer une base de données en format .txt. Cette base de données contient des mesures morphométriques d’une espèce de bruants (un oiseau). Vous pouvez la télécharger à cette adresse: https://github.com/frousseu/ECL749/tree/master/data.
Par la suite, vous devez calculer la longueur moyenne de la corde de l’aile (wingcrd) et de la masse (wt) et effectuez des graphiques mettant en relation les deux mesures. Les fonctions subset et plot devraient vous être utiles.
Vous devez également utiliser la fonction table pour compter le nb d’observations de mâles et de femelles et apprendre la fonction boxplot pour comparer la variabilité de la masse chez les deux sexes.
Finalement, effectuez et interprétez un test de t pour comparer la masse chez les deux sexes.
Il y a peut-être quelques petits problèmes avec la base de données…