knitr::opts_chunk$set( collapse = TRUE, comment = "#>", echo = TRUE )
>
: 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 à -7pander::pandoc.table(c(3:1, 0:3))
<-
Comment "sauvegarder" ces objets ?
En utilisant l'opérateur d'assignation
library(ggplot2)
data.frame(x = 0, y = 0, lab = "<-") |> ggplot(aes(x, y, label = lab)) + geom_text(size = 50, family = "Courier", fontface = "bold") + theme_void() + theme(plot.margin = unit(c(0, 0, 0, 0), "cm"))
=
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 :pander::pandoc.table(c(3:1, 0:3))
On peut appliquer des opérations à ces "vecteurs" !
a <- 1:5 a + 1 a * 2
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) nrow(fruits) ncol(fruits)
head(fruits)
print.data.frame(head(fruits))
fruits
print.data.frame(fruits)
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
data.frame(x = c(0, 1, 0, 1), y = c(1, 1, 0, 0), lab = c("[ ]", "[ , ]", "[[ ]]", "$")) |> ggplot(aes(x, y, label = lab, color = lab)) + geom_text(aes(hjust = x, vjust = y), size = 20, family = "Courier", fontface = "bold", show.legend = FALSE) + theme_void() + theme(plot.margin = unit(c(0, 0, 0, 0), "cm"))
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.
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.