- Créer un projet dans ce dossier :
- Bien réfléchir au nom de ce projet
- Bien réfléchir à l’endroit où ce projet sera situé
- Créer un script
- Savoir où sont les données, et sous quel format
- Savoir ce que l’on veut faire !
>
: R attend une commande à exécuter+
: la commande qui a été entrée n’est pas complète car
: la commande est en cours de traitement. On peut l’arrêter en cliquant sur le bouton “Stop”C’est une séquence d’opérations appliquées à des objets ou des valeurs qui sera donnée au compilateur de R pour interprétation.
log
;0
.Une fois la commande écrite dans la console, on l’exécute en appuyant sur “Entrée”.
Exécutez les commandes suivantes :
1 + 1
1+1
log(10)
log10(10)
Remarquez l’utilisation des parenthèses pour appliquer une fonction !
On peut effectuer toutes les opérations de base en R :
+
), soustraction (-
), multiplication (*
), division (/
), exponentiation (**
ou ^
)…appliquer les fonctions mathématiques de base :
log
, log2
, log10
), exponentielle (exp
) sinus (sin
), cosinus (cos
), tangente (tan
)On peut combiner les opérations et les fonctions, et gérer les priorités avec des parenthèses !
Imaginez une commande incluant le plus d’opérations et de fonctions de base et dont le résultat serait 2 !
:
Comment créer une suite d’entier ?
c(1, 2, 3, 4)
seq(1, 4, 1)
1:4
L’opérateur :
est très utilisé en R. Sa syntaxe est la suivante
:
\(j\) va créer une suite d’entiers de \(i\) à \(j\). Les entiers peuvent être négatifs ou positifs, et on peut peut avoir \(i < j\) ou \(i > j\), ou même \(i = j\).Attention à bien mettre des parenthèses dans le cas d’entiers négatifs!
3:7
: les entiers de 3 Ã 77:3
: les entiers de 7 Ã 3-3:7
: les entiers de -3 Ã 7-3:-7
: les entiers de -3 Ã -7-(3:7)
: les entiers de -3 Ã -73 | 2 | 1 | 0 | 1 | 2 | 3 |
<-
Comment “sauvegarder” ces objets ?
En utilisant l’opérateur d’assignation
=
a <- 1; b <- 1:10; a <- 2
etc.Règles absolues :
+
, -
, *
, /
, ^
, **
, etc.)NA
, TRUE
, FALSE
, for
, if
, else
etc.)Bonnes pratiques :
a
b
ab
selon le modèle suivant :3 | 2 | 1 | 0 | 1 | 2 | 3 |
On peut appliquer des opérations à ces “vecteurs” !
a <- 1:5 a + 1 #> [1] 2 3 4 5 6 a * 2 #> [1] 2 4 6 8 10
Ces “vecteurs” sont des objets.
Nom | Appelation officielle | Exemple |
---|---|---|
Vecteur | ??? | 1:10 |
Facteur | factor |
gl(2, 2) |
Matrice | matrix |
matrix(1:4, 2, 2) |
Tableau | data.frame |
mtcars |
Liste | list |
list(a = 1, b = 1:10, c = "Hello!") |
Fonction | function |
sin , exp , log |
Pour connaître la classe d’un objet : class(objet)
.
Nom | Appellation officielle | Exemple |
---|---|---|
Entier (\(\mathbb Z\)) | integer |
1:10 , (ou 1L ) |
Réel (\(\mathbb R\)) | double |
2.3 , 1/3 , etc… |
Caractères | character |
month.name , "Bonjour" |
Booléen | logical |
TRUE |
MATH., néol. Qui est relatif aux théories du logicien et mathématicien anglais George Boole.
– Trésor de la Langue Française informatisé
TRUE
(ou bien T
) et FALSE
(ou bien F
)==
, !=
, <
, >
, <=
, >=
!
, &
, |
, xor
1 == 2
!(5 > -6)
(1 <= 10) | (1 > 0)
Prédisez le résultat de la commande suivante : log(1) != 0
Les objets qui ne contiennent qu’un seul type de données : vecteurs et matrices.
Les objets pouvant contenir des données mixtes : tableaux et listes.
La flexibilité a un coût : on ne peut plus faire certaines opérations !
Les objets ayant des “dimensions” : vecteurs, tableaux et matrices
Les objets pour qui cela ne signifie rien ou presque : listes et fonctions
data("fruits", package = "minidebuter") dim(fruits) #> [1] 51 18 nrow(fruits) #> [1] 51 ncol(fruits) #> [1] 18
head(fruits)
#> nom groupe Energie Eau Proteines Glucides Lipides Sucres #> 1 Abricot crus 194 87.1 0.81 9.01 0.25 6.7 #> 2 Abricot secs 1010 24.7 2.88 59.10 0.50 34.3 #> 3 Ananas exotique 304 81.3 0.94 15.10 0.25 14.9 #> 4 Banane exotique 383 75.8 1.06 19.70 0.25 15.6 #> 5 Canneberge secs 1410 14.6 0.25 76.40 1.00 72.8 #> 6 Cerise crus 235 85.7 0.81 13.00 0.25 10.0 #> Fructose Fibres Calcium Magnesium Phosphore Potassium Zinc BetaCarotene #> 1 1.3 1.7 15.0 8.4 22.0 260 0.09 2350.0 #> 2 10.6 8.3 71.0 41.0 79.0 1400 0.35 2160.0 #> 3 2.8 2.4 6.3 15.0 9.6 130 0.11 21.2 #> 4 3.8 2.7 5.1 28.0 29.0 320 0.14 28.5 #> 5 28.4 5.7 8.0 3.9 7.5 58 0.05 15.5 #> 6 4.6 1.6 9.9 8.8 19.0 190 0.06 242.0 #> VitamineE VitamineC #> 1 0.70 2.55 #> 2 5.52 0.25 #> 3 0.04 18.30 #> 4 0.04 7.16 #> 5 1.92 0.25 #> 6 0.04 4.09
fruits
#> nom groupe Energie Eau Proteines Glucides Lipides #> 1 Abricot crus 194 87.1 0.81 9.01 0.25 #> 2 Abricot secs 1010 24.7 2.88 59.10 0.50 #> 3 Ananas exotique 304 81.3 0.94 15.10 0.25 #> 4 Banane exotique 383 75.8 1.06 19.70 0.25 #> 5 Canneberge secs 1410 14.6 0.25 76.40 1.00 #> 6 Cerise crus 235 85.7 0.81 13.00 0.25 #> 7 Citron crus 118 91.3 0.25 1.56 0.25 #> 8 Clementine crus 200 87.0 0.81 9.17 0.25 #> 9 CompoteMultiFruits compote 279 82.9 0.25 15.30 0.08 #> 10 CompotePomme compote 432 72.9 0.23 24.40 0.21 #> 11 Figue crus 293 80.2 1.19 13.50 0.25 #> 12 Fraise crus 162 90.3 0.63 6.03 0.25 #> 13 Framboise crus 206 86.8 1.19 5.83 0.80 #> 14 FruitCru crus 251 84.5 0.70 11.60 0.26 #> 15 Grenade crus 340 79.4 1.44 14.30 1.20 #> 16 Groseille crus 289 82.1 1.56 7.06 0.70 #> 17 Kaki exotique 290 81.8 0.88 14.30 0.25 #> 18 Kiwi exotique 255 83.5 0.88 11.00 0.60 #> 19 Lime exotique 170 86.3 1.13 3.14 0.25 #> 20 Litchi exotique 344 80.5 1.13 16.10 0.25 #> 21 Mangue exotique 376 77.1 0.75 19.30 0.50 #> 22 Maracuja exotique 425 73.6 2.13 10.90 3.00 #> 23 Melange secs 1640 11.7 2.19 69.50 10.50 #> 24 Melon crus 265 84.2 1.13 14.80 0.25 #> 25 Mirabelle crus 325 78.1 0.63 18.00 0.25 #> 26 Mure crus 198 86.1 1.13 6.53 0.70 #> 27 Myrtille crus 244 84.2 0.87 10.60 0.33 #> 28 NectarineBlanche crus 220 86.5 0.81 11.40 0.25 #> 29 NectarineJaune crus 218 86.6 0.69 11.30 0.25 #> 30 Orange crus 192 87.3 0.75 8.03 0.25 #> 31 Pamplemousse crus 169 89.3 0.25 8.02 0.25 #> 32 Papaye exotique 178 88.8 0.75 8.53 0.25 #> 33 Papaye exotique 169 88.6 0.56 7.88 0.25 #> 34 Pasteque crus 165 91.0 0.69 8.33 0.25 #> 35 PecheBlanche crus 199 87.6 0.69 9.48 0.25 #> 36 PecheBlanche crus 195 87.6 0.63 9.63 0.25 #> 37 PecheJaune crus 196 87.8 0.69 9.80 0.25 #> 38 PoireConference crus 223 85.3 0.25 11.40 0.25 #> 39 PoireWilliams crus 228 84.7 0.25 11.50 0.25 #> 40 PommeGolden crus 242 85.1 0.25 12.80 0.25 #> 41 PommeChantecler crus 219 86.4 0.25 11.20 0.25 #> 42 PommeGala crus 230 85.5 0.25 11.90 0.25 #> 43 PommeGrannySmith crus 217 85.8 0.25 10.70 0.25 #> 44 PommePinklady crus 254 83.6 0.25 12.80 0.25 #> 45 Prune crus 301 80.1 0.94 16.40 0.25 #> 46 Pruneau secs 969 34.9 1.63 55.40 0.40 #> 47 PureeDeFruits compote 249 84.2 0.25 13.40 0.25 #> 48 Raisin secs 1360 16.0 3.00 73.20 0.90 #> 49 RaisinBlanc crus 311 80.9 0.75 16.60 0.25 #> 50 RaisinChasselas crus 335 79.4 0.75 16.90 0.50 #> 51 RaisinNoirMuscat crus 381 76.7 0.69 20.00 0.25 #> Sucres Fructose Fibres Calcium Magnesium Phosphore Potassium Zinc #> 1 6.70 1.30 1.70 15.00 8.40 22.0 260 0.090 #> 2 34.30 10.60 8.30 71.00 41.00 79.0 1400 0.350 #> 3 14.90 2.80 2.40 6.30 15.00 9.6 130 0.110 #> 4 15.60 3.80 2.70 5.10 28.00 29.0 320 0.140 #> 5 72.80 28.40 5.70 8.00 3.90 7.5 58 0.050 #> 6 10.00 4.60 1.60 9.90 8.80 19.0 190 0.060 #> 7 0.80 0.40 0.25 11.00 7.90 12.0 140 0.330 #> 8 8.60 1.50 1.70 23.00 9.30 18.0 140 0.100 #> 9 14.60 6.92 1.60 6.20 5.50 11.0 140 0.050 #> 10 20.70 7.90 1.53 4.44 5.09 6.0 104 0.025 #> 11 12.20 6.20 4.10 57.00 22.00 21.0 230 0.160 #> 12 5.60 3.30 3.80 18.00 12.00 23.0 140 0.110 #> 13 5.40 2.80 4.30 16.00 20.00 29.0 170 0.240 #> 14 9.89 3.62 1.97 14.50 12.10 20.1 197 0.110 #> 15 13.30 7.10 2.30 9.50 12.00 27.0 230 0.220 #> 16 6.63 3.86 4.60 38.00 12.00 38.0 230 0.150 #> 17 13.90 6.40 3.40 6.90 7.20 13.0 160 0.050 #> 18 8.90 4.30 2.40 29.00 12.00 26.0 290 0.120 #> 19 2.10 0.80 4.30 57.00 14.00 24.0 190 0.150 #> 20 15.70 8.10 2.00 3.60 18.00 27.0 200 0.230 #> 21 18.40 8.65 1.80 14.00 14.00 13.0 150 0.080 #> 22 8.50 2.50 6.80 8.10 26.00 46.0 240 0.760 #> 23 59.40 19.50 3.40 43.00 39.00 67.0 530 0.320 #> 24 10.60 2.49 1.30 11.00 16.00 17.0 380 0.180 #> 25 13.30 2.20 2.20 11.00 8.20 21.0 240 0.110 #> 26 6.10 3.08 5.20 31.00 20.00 25.0 200 0.180 #> 27 9.96 4.97 2.40 6.00 6.00 12.0 77 0.160 #> 28 8.90 1.30 0.25 5.00 8.10 18.0 210 0.100 #> 29 8.80 1.20 0.60 4.80 8.00 19.0 220 0.110 #> 30 7.60 2.10 2.70 66.00 15.00 38.0 180 0.250 #> 31 6.60 1.90 0.80 14.00 7.20 17.0 140 0.070 #> 32 8.10 4.10 1.80 22.00 18.00 8.7 200 0.050 #> 33 7.70 3.60 2.20 18.00 12.00 11.0 240 0.090 #> 34 7.90 3.60 0.50 6.00 11.00 9.7 100 0.090 #> 35 8.70 0.90 2.10 4.10 7.10 18.0 180 0.110 #> 36 7.80 0.80 1.10 3.90 6.80 18.0 170 0.100 #> 37 7.60 1.10 1.00 4.20 6.70 17.0 190 0.090 #> 38 9.40 6.60 3.10 3.90 5.30 9.3 99 0.070 #> 39 9.40 7.20 3.10 6.10 5.30 9.8 120 0.090 #> 40 11.50 6.90 1.40 4.00 3.80 10.0 130 0.070 #> 41 10.80 5.40 1.90 4.00 3.60 10.0 120 0.050 #> 42 11.10 6.30 1.90 3.60 3.00 7.8 91 0.050 #> 43 10.10 5.80 2.80 3.20 2.80 7.6 110 0.050 #> 44 12.30 6.60 2.90 2.80 3.00 7.5 110 0.050 #> 45 10.40 1.80 1.70 13.00 9.50 20.0 250 0.120 #> 46 38.10 12.50 5.10 50.00 30.00 66.0 610 0.280 #> 47 11.30 7.20 1.70 6.20 6.00 11.0 140 0.050 #> 48 70.30 36.00 4.20 54.00 35.00 82.0 960 0.240 #> 49 15.50 8.50 1.00 12.00 7.60 16.0 200 0.050 #> 50 16.50 8.40 2.00 16.00 7.50 21.0 150 0.070 #> 51 19.60 9.80 2.70 13.00 7.30 20.0 210 0.060 #> BetaCarotene VitamineE VitamineC #> 1 2350.00 0.70 2.55 #> 2 2160.00 5.52 0.25 #> 3 21.20 0.04 18.30 #> 4 28.50 0.04 7.16 #> 5 15.50 1.92 0.25 #> 6 242.00 0.04 4.09 #> 7 2.50 0.04 45.00 #> 8 147.00 0.21 49.20 #> 9 99.30 0.53 11.50 #> 10 3.00 0.18 14.50 #> 11 73.60 0.04 0.25 #> 12 2.50 0.30 54.00 #> 13 100.00 0.88 18.70 #> 14 314.00 0.29 20.90 #> 15 12.10 0.04 9.02 #> 16 25.60 1.19 29.80 #> 17 180.00 0.12 3.41 #> 18 38.00 0.96 81.90 #> 19 12.40 0.45 29.30 #> 20 2.50 0.04 19.20 #> 21 2010.00 1.96 2.90 #> 22 1010.00 0.50 25.60 #> 23 13.60 0.69 0.69 #> 24 2500.00 0.04 8.14 #> 25 346.00 1.52 5.29 #> 26 156.00 1.28 10.10 #> 27 32.00 0.57 9.70 #> 28 2.50 1.04 3.01 #> 29 144.00 0.04 3.38 #> 30 2.50 0.19 47.50 #> 31 539.00 0.04 42.40 #> 32 351.00 0.04 65.30 #> 33 1230.00 0.22 68.00 #> 34 1220.00 0.04 4.26 #> 35 2.50 0.19 3.85 #> 36 2.50 0.28 4.09 #> 37 130.00 0.50 3.43 #> 38 19.30 0.04 1.39 #> 39 2.50 0.04 2.57 #> 40 56.00 0.04 0.25 #> 41 54.60 0.04 2.85 #> 42 11.60 0.04 1.33 #> 43 11.60 0.04 2.31 #> 44 32.30 0.04 2.13 #> 45 430.00 1.20 4.16 #> 46 14.90 0.41 0.25 #> 47 31.00 0.40 16.70 #> 48 2.50 1.67 0.25 #> 49 7.54 0.31 1.07 #> 50 27.40 0.35 4.14 #> 51 67.70 0.99 3.11
data
RData
) : load
read.table
readxl::read_excel
data()
pour avoir une liste (presque ?) exhaustive.data("nom_des_data", package = "nom_du_package")
data(mtcars)
DNase
library(ggplot2) ; data(diamonds)
library
, require
, data
"bonjour"
est équivalent à 'bonjour'
.fruits
Opérateur | Vecteurs | Matrices | Tableaux | Listes |
---|---|---|---|---|
[ ] |
x | x | x | |
[ , ] |
x | x | ||
[[ ]] |
x | x | ||
$ |
x | x |
[ , ]
fruits[1, ]
fruits[, 2]
fruits[-3, ]
fruits[, -4]
Comment faire pour sélectionner les fruits numéro 1, 3 et 5 ?
Je veux deux solutions : une “normale” et une “créative” !
fruits[c(1, 3), ]
fruits[, c(2, 4)]
fruits[-c(5, 7), ]
fruits[, -c(6, 8)]
Pour sélectionner une plage entière de lignes ou de colonnes adjacentes :
fruits[11:17, ]
fruits[, 3:5]
fruits[-(1:3), ]
fruits[, -(1:5)]
Que se passe-t-il quand on oublie les parenthèses dans la commande fruits[-(1:3), ]
? Commentez !
Faites de même avec le jeu de données mtcars
.
$
La syntaxe donnees$cible
permet de sélectionner la colonne cible
du tableau donnees
.
fruits$Eau
fruits$groupe
N.B: la selection de la colonne sert soit à récupérer le contenu de cette colonne soit à créer la colonne ou remplacer son contenu. Par exemple : fruits$num <- 1:nrow(fruits)
Extrayez la colonne de la teneur en sucres de la table des fruits… de deux façons différentes !
Créez un objets contenant la teneur en sucres : quelle est la classe de cet objet ?
Exemples :
i <- 1:10
eau <- fruits$Eau
eau[i]
Créez un vecteur groupe
contenant les groupes de fruits. Donnez deux façons différentes d’extraire les dix premières valeurs de ce vecteur.
Comment extraire les fruits … * dont la teneur en eau est supérieure à 60 ? * exotiques ? * secs contenant moins de 40g/100g de sucres ?
Réponse : en utilisant des vecteurs booléens
fruits$Eau >= 60
fruits[fruits$Eau >= 60, ]
Ne pas oublier la virgule !
Pour un vecteur v
:
v[bool]
extrait les valeurs de v
pour lesquelles bool
est vrai (TRUE
). Contrainte : v
et bool
doivent contenir le même nombre d’élements.Pour un tableau tab
:
tab[brow, ]
pour extraire les lignestab[, bcol]
brow
doit avoir autant d’éléments que tab
de lignesbcol
doit avoir autant d’éléments que tab
de colonnesVous verrez souvent des opérations logiques à l’intérieur des crochets carrés : cela permet d’aller plus vite !
Par exemple, en deux étapes :
bool <- fruits$groupe == "secs" & fruits$Sucres < 40
fruits[bool, ]
Devient, en une étape :
fruits[fruits$groupe == "secs" & fruits$Sucres < 40, ]
On peut combiner deux méthodes d’extraction de données pour un tableau : une sur les lignes et une sur les colonnes !
Par exemple : tab[brow, icol]
, où brow
est un vecteur de booléens et icol
un vecteur d’indices.
Construisez la sous-table contenant la teneur en protéines, en glucides et en lipides des fruits secs.
En R, on peut donner des “noms”…
Pourquoi ? Pour pouvoir disposer d’une nouvelle méthode d’extraction de données !
On utilise :
rownames(tab)
pour connaître le nom des lignescolnames(tab)
pour connaître le nom des colonnesEt, en bonus, on peut :
rownames(tab) <- new1
colnames(tab) <- new2
Et, en super bonus, on peut :
rownames(tab)[sel1] <- new1
colnames(tab)[sel1] <- new2
La syntaxe obj[i] <- newvalue
(et ses variations) peut être utilisée pour tous les types d’objets indiçables. Mais il faut l’utiliser avec prudence !
Exemple : fruits$Energie[1:10] <- 0
Que s’est-il passé ? Au secours !!!!
Pour revenir en arrière : data("fruits", package = "minidebuter")
Exemple :
fruits[, "Energie"]
,fruits[, "groupe"]
,fruits[, c("Energie", "groupe")]
,fruits[, -"groupe"]
?Mode d’extraction | Exemples |
---|---|
Indices | fruits[, 2] |
Booléens | fruits[fruits$nom == "Abricot", ] |
Noms | fruits$nom ou fruits[,"nom"] |
Lister le maximum de façons possibles d’extraire du tableau fruits
les fruits crus sucrés riches en Vitamine C !
c()
permet de combiner des valeurs dans un vecteur. Attention, tout doit être du même “type” !seq
permet de créer des suites.rep
permet de créer des vecteurs en répétant des valeurs. Ex: rep(c("a", "b"), c(3, 4))
Les facteurs sont une particularité de R !
factor
ou as.factor
factor(fruits$groupe)
matrix
, rbind
et cbind
pour créer des matrices. Attention, tout doit être du même “type” !data.frame
ou as.data.frame
pour créer des tableaux, les colonnes ne contiennent pas nécessairement le même type de données.tibble
et tribble
(avancé)Directement à la création de l’objet. Ex: x <- c(a = 1, b = 2)
, d <- data.frame(a = 1:26, b = letters)
Ou bien après la création de l’objet :
names(obj) <- lesNoms
pour un vecteurrownames(obj) <- lesLignes
pour les lignes d’un tableau ou d’une matrice,colnames(obj) <- lesColonnes
pour les colonnes d’un tableau ou d’une matrice.Créez un facteur à partir des groupes de fruits, puis testez la commande suivante :
factor(fruits$groupe, levels = c("secs", "compote", "crus", "exotique"))
Que se passe-t-il ? Sauvez le résultat dans un objet et faites un diagramme en bâton avec ! Commentez !
Il s’agit d’estimer un caractéristique statistique d’un ensemble de données avec une seule valeur.
Paramètre | Grandeur statistique | Commande |
---|---|---|
Position | Moyenne | mean |
Position | Médiane | median |
Position | Minimum | min |
Position | Maximum | max |
Dispersion | Variance | var |
Dispersion | Ecart-type | sd |
Dispersion | Intervalle inter-quartiles | IQR |
Lien | Covariance | cov |
Lien | Corrélation | cor |
Permet de mesurer le degré de co-variation de deux variables :
\[ \operatorname{cov}(x, y)=\frac{1}{n-1} \sum_{i=1}^{n}\left(x_{i}-m_{x}\right)\left(y_{i}-m_{y}\right) \]
C’est une covariance normalisée entre -1 et 1 !
\[ \operatorname{cor}(x, y)=\frac{\operatorname{cov}(x, y)}{\sqrt{\operatorname{var}(x)} \sqrt{\operatorname{var}(y)}} \]
C’est la corrélation (de Pearson) calculée sur les rangs !
\[
\rho = \operatorname{cor}(r_x, r_y),
\] avec \(r_x\) le vecteur des rangs de \(x\) (rank(x)
), et \(r_y\) le vecteur des rangs de \(y\) (rank(y)
).
\[ \tau = \displaystyle \frac{n_C - n_D}{n_0}, \] avec \(n_C\) le nombre de paires concordantes, \(n_D\) le nombre de paires discordantes et \(n_0\) le nombre total de paires de points.
Calculez
Appliquez la fonction summary
aux données fruits
.
summary
pour obtenir des statistiquesstr
pour la structure des donnéestable
pour faire des tables de comptageseq_along
pour créer un vecteur d’indices de même longueur qu’un vecteur donnésum
pour calculer la somme de nombressort
, order
et rank
pour ordonner, et calculer les rangsrowSums
et colSums
pour calculer les sommes des lignes et colonnes d’une table,rowMeans
et colMeans
pour calculer les moyennes des lignes et colonnes d’une table,barplot
: diagrammes en bâtonshist
: histogrammesplot
: nuages de pointsbarplot
Permet de réaliser des diagrammes en bâtons :
barplot(table(fruits$groupe))
hist
Permet de réaliser des histogrammes :
hist(fruits$Eau)
plot
Permet de tracer des nuages de points :
plot(fruits$Eau, fruits$Sucres)
Faire un histogramme de la teneur en Vitamine C des fruits crus.