Nouvelle session

  • Ouverture d’une session en local ()

Mode console ou mode script

R est un langage scripté, de même que SQL ou python par exemple. Ceci implique que l’on peut exécuter des commandes en mode console, les unes après les autres. Mais il est aussi possible d’écrire un code dans un script et d’exécuter par la suite ce script.

Mode console

Pour ce mode, les commandes sont toutes écrites dans la console. Dans celle-ci, on peut utiliser les flèches haut et bas pour naviguer dans l’historique des commandes.

  • tapez : 1 + 2 (Entrée pour valider)
> 1 + 2
[1] 3
  • tapez : a = 1, puis b = 2, puis a + b, puis a + B
> a = 1
> b = 2
> a + b
[1] 3
  • Sensibilité à la casse (majuscule/minuscule)
> a + B
Error in eval(expr, envir, enclos): objet 'B' introuvable

Mode script

Ce mode permet d’écrire plusieurs commandes et de les exécuter en une seule fois. Il est utile de stocker les différentes commandes et commentaires associés, même si celles-ci sont exécutées les unes après les autres.

  • nouveau R script
  • écrire les trois instructions suivantes

    a = 1
    b = 2
    a + b
  • pour exécuter, vous avez plusieurs possibilités
    1. tout sélectionner, et cliquer sur Run
    2. idem, mais taper sur Ctrl+Entrée
    3. mettre le curseur sur la première ligne, et cliquer sur Run trois fois
    4. idem, mais en tapant sur Ctrl+Entrée trois fois
    5. cliquer sur sur Source
  • sauvegarder le script dans un fichier avec l’extension .r (ou .R)
    • attention à le nommer correctement (par exemple tp1.r) et de le mettre dans un répertoire dédié (par exemple Initiation à R, lui même dans un répertoire Semestre 1)
    • on pourra complétement l’exécuter par la suite en tapant source("tp1.r"") dans la console

Dans un mode totalement script, l’idée est d’avoir un code qui s’exécute en une fois. Mais comme indiqué précédemment, il est également intéressant de pouvoir stocker dans un fichier l’ensemble des commandes qu’on a exécutées, soit pour réviser, soit pour pouvoir les ré-utiliser plus tard si nécessaire (ce qui arrive très souvent en entreprise).

Une fois les commandes exécutées (via mode console ou script exécuté), les variables a et b sont créées (cf panneau Environment) et utilisables (par ex. a * b). Ces variables seront détruites lors de la fin de la session. Une autre moyen de les supprimer est d’utiliser la commande rm(). Celle-ci est importante pour nettoyer l’espace de travail et ne pas utiliser trop d’espace (dans un environnement professionnel, sur serveur, il est nécessaire de faire attention à ce détail).

> v = "une variable"
> print(v)
[1] "une variable"
> rm(v)
> print(v)
Error in print(v): objet 'v' introuvable

Pour ajouter des commentaires (très important à mettre dans tout code informatique), il n’existe que le caractère # à placer en début de ligne, ce qui donne par exemple

# Premières instructions
#   (taper sur `Ctrl+Entrée` pour exécuter le code)

Quelques commandes de base

Nous allons voir quelques commandes classiques à connaître pour développer des codes R.

Affichage

Comme on l’a vu précédemment, si on exécute, dans la console ou en exécutant une ligne d’un script, une expression qui renvoie un résultat (par exemple le nom d’une variable ou un calcul), celui-ci s’affiche directement. Dans certains cas, et pour être certain que l’affichage se fasse, il est préférable de l’expliciter avec la commande print().

> print(a)
[1] 1
> print(a + b)
[1] 3
> print("bonjour")
[1] "bonjour"

Création de vecteur simple

Comme nous le verrons plus tard, R manipule différents types de données, mais le premier à voir est le type vector. Les variables a et v créées ci-dessus sont stockées comme des vectors (ensemble indexé de valeurs de même type).

Séquences

Les vecteurs les plus simples à créer sont les séquences de nombres. Les deux premières instructions renvoient le même vector : 1, 2, 3, 4, 5. La fonction seq(debut, fin) permet de créer une séquence (croissante ou décroissante), à partir d’un nombre de départ et d’un nombre de fin. Sans précision, le pas est de \(1\) (ou \(-1\) si debut > fin). On peut aussi définir le pas (avec by =) ou la longueur (avec length =).

> 1:5
[1] 1 2 3 4 5
> seq(1, 5)
[1] 1 2 3 4 5
> seq(5, 1)
[1] 5 4 3 2 1
> seq(1, 5, by = .5)
[1] 1.0 1.5 2.0 2.5 3.0 3.5 4.0 4.5 5.0
> seq(5, 1, length = 3)
[1] 5 3 1

Combinaison de valeurs

Si on veut combiner des valeurs qui ne constituent pas une séquence, il est possible de créer un vecteur avec la fonction c(). Celle-ci prend toutes les valeurs en paramètres (sans limite spécifique) pour les mettre dans un même vector. Si ceux-ci sont de types différents (par exemple, numérique et caractère), elle transforme les valeurs numériques en chaînes de caractères.

> c(1, 2, 5:7)
[1] 1 2 5 6 7
> c("FX", "Jollois")
[1] "FX"      "Jollois"
> c(1, "trois")
[1] "1"     "trois"

Répétition de valeurs

Une autre besoin est de créer un vecteur répétant un certain nombre de valeurs. Sans précision, la fonction rep(vec, nb) répéte le vecteur vec autant de fois qu’indiqué dans nb. Si on veut répéter chaque valeur directement, on doit utiliser le paramètre each = (cf 3ème exemple). Et on peut combiner les deux écritures pour répéter chaque valeur 3 fois, et le vecteur ainsi créé deux fois (4ème exemple).

> rep(5, 2)
[1] 5 5
> rep(1:5, 2)
 [1] 1 2 3 4 5 1 2 3 4 5
> rep(1:5, each = 3)
 [1] 1 1 1 2 2 2 3 3 3 4 4 4 5 5 5
> rep(1:5, 2, each = 3)
 [1] 1 1 1 2 2 2 3 3 3 4 4 4 5 5 5 1 1 1 2 2 2 3 3 3 4 4 4 5 5 5

Concaténation de chaînes

Pour concaténer deux chaînes (i.e. les regrouper en une seule), nous avons à disposition la fonction paste() (et une version pré-paramétrée paste0()). Cette fonction prend en paramètres des vecteurs de chaînes pour les concaténer. Si les valeurs ne sont pas des chaînes, elles sont autoamtiquement tranformées.

Par défaut, les chaînes sont séparées par un espace (cf exemple 1), mais il est possible de définir celui-ci via le paramètre sep = (cf exemple 2 et 3). La fonction paste0() est identique mais le séparateur par défaut est une chaîne vide (cf exemple 4).

> paste("bon", "jour")
[1] "bon jour"
> paste("bon", "jour", sep = "-")
[1] "bon-jour"
> paste("bon", "jour", sep = "")
[1] "bonjour"
> paste0("bon", "jour")
[1] "bonjour"

Si on souhaite concaténer deux vecteurs de tailles différentes, le vecteur le plus court est répéter autant de fois que nécessaire. Dans l’exemple 1 ci-dessous, le terme "bon" est donc répéter 2 fois. Il faut donc faire attention à concaténer deux vecteurs cohérents en taille (cf exemple 2, 5 n’étant pas un multiple de 2).

> paste0("bon", c("jour", "soir"))
[1] "bonjour" "bonsoir"
> paste(c("x", "y"), 1:5, sep = "=")
[1] "x=1" "y=2" "x=3" "y=4" "x=5"

Enfin, on peut vouloir regrouper des valeurs d’un même vecteur dans une même chaîne. Pour cela, nous devons utiliser le paramètre collapse =, comme dans l’exemple ci-dessous.

> paste(1:5, collapse = ",")
[1] "1,2,3,4,5"

Opérateurs mathématiques

Comme dans tous les langages, nous avons accès aux opérateurs mathématiques classiques, comme présenté ci-dessous.

> - 2
[1] -2
> 1 + 2
[1] 3
> 1 - 2
[1] -1
> 1 * 2
[1] 2
> 1 / 2
[1] 0.5
> (1 / 2) * (3 + 4)
[1] 3.5
> 2 ^ 3 # (puissance)
[1] 8
> 2 ** 3 # (puissance)
[1] 8
> sqrt(9) # (racine carrée)
[1] 3

Nous avons aussi accès à des fonctions telles que valeur absolue (abs()), logarithme (log()) et exponentielle (exp()), et toutes les fonctions trigonométrique (avec cos(), sin(), tan(), …).

> abs(-12) # (valeur absolue)
[1] 12
> log(2.718282) # (logarithme)
[1] 1
> exp(1) # (exponentielle)
[1] 2.718282
> cos(1) # (cosinus)
[1] 0.5403023
> sin(1) # (sinus)
[1] 0.841471
> tan(1) # (tangente)
[1] 1.557408

Opérateurs de comparaison

De la même manière, les opérateurs classiques de comparaison sont disponibles, comme présentés ci-dessous.

> a > 1
[1] FALSE
> a >= 1
[1] TRUE
> a < 1
[1] FALSE
> a <= 1
[1] TRUE
> a == 1
[1] TRUE
> a != 1
[1] FALSE

On dispose aussi de l’opérateur %in% qui test si chaque valeur du premier vecteur est présent dans le deuxième vecteur. Il renvoie donc un vecteur de booléen (TRUE/FALSE) indiquant si la valeur est dans le deuxième vecteur ou non.

> a %in% c(1, 3, 5)
[1] TRUE
> c(1, 3, 5) %in% a
[1]  TRUE FALSE FALSE

Aide

Pour accéder à l’aide, il est possible d’utiliser les moyens suivants :

  • pour obtenir l’aide sur une commande, on peut exécuter
    • help(commande) (par exemple, help(print))
    • ou plus simplement ?commande (?print)
  • pour chercher dans l’aide, on a aussi deux possibilités
    • help.search("terme(s)") (par exemple, help.search("print"))
    • ??terme (par exemple, ??print)

Données déjà présentes

Il existe des données déjà présentes dans le logiciel R, soit de base, soit suite à l’ajout d’un package (dont on parlera plus tard). Pour avoir la liste des données, vous pouvez taper data(). Pour avoir plus d’informations sur un jeu de données, il faut accéder à l’aide de celui-ci. Nous allons travailler ici sur le jeu de données mtcars, qui contient les informations de 32 voitures sur 11 caractéristiques.

Pour voir le jeu de données en entier dans la console, vous devez juste exécuter son nom

> mtcars
                     mpg cyl  disp  hp drat    wt  qsec vs am gear carb
Mazda RX4           21.0   6 160.0 110 3.90 2.620 16.46  0  1    4    4
Mazda RX4 Wag       21.0   6 160.0 110 3.90 2.875 17.02  0  1    4    4
Datsun 710          22.8   4 108.0  93 3.85 2.320 18.61  1  1    4    1
Hornet 4 Drive      21.4   6 258.0 110 3.08 3.215 19.44  1  0    3    1
Hornet Sportabout   18.7   8 360.0 175 3.15 3.440 17.02  0  0    3    2
Valiant             18.1   6 225.0 105 2.76 3.460 20.22  1  0    3    1
Duster 360          14.3   8 360.0 245 3.21 3.570 15.84  0  0    3    4
Merc 240D           24.4   4 146.7  62 3.69 3.190 20.00  1  0    4    2
Merc 230            22.8   4 140.8  95 3.92 3.150 22.90  1  0    4    2
Merc 280            19.2   6 167.6 123 3.92 3.440 18.30  1  0    4    4
Merc 280C           17.8   6 167.6 123 3.92 3.440 18.90  1  0    4    4
Merc 450SE          16.4   8 275.8 180 3.07 4.070 17.40  0  0    3    3
Merc 450SL          17.3   8 275.8 180 3.07 3.730 17.60  0  0    3    3
Merc 450SLC         15.2   8 275.8 180 3.07 3.780 18.00  0  0    3    3
Cadillac Fleetwood  10.4   8 472.0 205 2.93 5.250 17.98  0  0    3    4
Lincoln Continental 10.4   8 460.0 215 3.00 5.424 17.82  0  0    3    4
Chrysler Imperial   14.7   8 440.0 230 3.23 5.345 17.42  0  0    3    4
Fiat 128            32.4   4  78.7  66 4.08 2.200 19.47  1  1    4    1
Honda Civic         30.4   4  75.7  52 4.93 1.615 18.52  1  1    4    2
Toyota Corolla      33.9   4  71.1  65 4.22 1.835 19.90  1  1    4    1
Toyota Corona       21.5   4 120.1  97 3.70 2.465 20.01  1  0    3    1
Dodge Challenger    15.5   8 318.0 150 2.76 3.520 16.87  0  0    3    2
AMC Javelin         15.2   8 304.0 150 3.15 3.435 17.30  0  0    3    2
Camaro Z28          13.3   8 350.0 245 3.73 3.840 15.41  0  0    3    4
Pontiac Firebird    19.2   8 400.0 175 3.08 3.845 17.05  0  0    3    2
Fiat X1-9           27.3   4  79.0  66 4.08 1.935 18.90  1  1    4    1
Porsche 914-2       26.0   4 120.3  91 4.43 2.140 16.70  0  1    5    2
Lotus Europa        30.4   4  95.1 113 3.77 1.513 16.90  1  1    5    2
Ford Pantera L      15.8   8 351.0 264 4.22 3.170 14.50  0  1    5    4
Ferrari Dino        19.7   6 145.0 175 3.62 2.770 15.50  0  1    5    6
Maserati Bora       15.0   8 301.0 335 3.54 3.570 14.60  0  1    5    8
Volvo 142E          21.4   4 121.0 109 4.11 2.780 18.60  1  1    4    2

Vous pouvez aussi le voir dans RStudio à l’aide de la commande View(mtcars) (à exécuter dans la console de préférence). Vous pouvez regarder l’aide du jeu de données, avec ?mtcars par exemple, pour avoir plus d’informations sur ce jeu de données.

Informations diverses

Les données de type table SQL comme mtcars sont stockées dans un format spécifique, data.frame, comme permet de le confirmer la fonction class() (qui renvoie le type de l’opbjet passé en paramètre).

> class(mtcars)
[1] "data.frame"

Sur un data.frame, il est possible d’avoir les dimensions avec dim(), qui sont le nombre de lignes (nrow()) et le nombre de colonnes (ncol()).

> dim(mtcars)
[1] 32 11
> nrow(mtcars)
[1] 32
> ncol(mtcars)
[1] 11

Un data.frame contient des noms de colonnes (dits aussi d’attributs), qu’on peut obtenir avec les fonctions names() ou colnames(). Il contient parfois aussi des noms de lignes (qui sont des identifiants), accessibles avec rownames(). Si ce n’est pas le cas, la fonction renvoie une séquence de type 1:nrow(obj). Enfin, la fonction str() renvoie un résumé de la table sous la forme d’une liste avec un item par variable, contenant le nom de celle-ci, son type et les premières valeurs.

> names(mtcars)
 [1] "mpg"  "cyl"  "disp" "hp"   "drat" "wt"   "qsec" "vs"   "am"   "gear"
[11] "carb"
> colnames(mtcars)
 [1] "mpg"  "cyl"  "disp" "hp"   "drat" "wt"   "qsec" "vs"   "am"   "gear"
[11] "carb"
> rownames(mtcars)
 [1] "Mazda RX4"           "Mazda RX4 Wag"       "Datsun 710"         
 [4] "Hornet 4 Drive"      "Hornet Sportabout"   "Valiant"            
 [7] "Duster 360"          "Merc 240D"           "Merc 230"           
[10] "Merc 280"            "Merc 280C"           "Merc 450SE"         
[13] "Merc 450SL"          "Merc 450SLC"         "Cadillac Fleetwood" 
[16] "Lincoln Continental" "Chrysler Imperial"   "Fiat 128"           
[19] "Honda Civic"         "Toyota Corolla"      "Toyota Corona"      
[22] "Dodge Challenger"    "AMC Javelin"         "Camaro Z28"         
[25] "Pontiac Firebird"    "Fiat X1-9"           "Porsche 914-2"      
[28] "Lotus Europa"        "Ford Pantera L"      "Ferrari Dino"       
[31] "Maserati Bora"       "Volvo 142E"         
> str(mtcars)
'data.frame':   32 obs. of  11 variables:
 $ mpg : num  21 21 22.8 21.4 18.7 18.1 14.3 24.4 22.8 19.2 ...
 $ cyl : num  6 6 4 6 8 6 8 4 4 6 ...
 $ disp: num  160 160 108 258 360 ...
 $ hp  : num  110 110 93 110 175 105 245 62 95 123 ...
 $ drat: num  3.9 3.9 3.85 3.08 3.15 2.76 3.21 3.69 3.92 3.92 ...
 $ wt  : num  2.62 2.88 2.32 3.21 3.44 ...
 $ qsec: num  16.5 17 18.6 19.4 17 ...
 $ vs  : num  0 0 1 1 0 1 0 1 1 1 ...
 $ am  : num  1 1 1 0 0 0 0 0 0 0 ...
 $ gear: num  4 4 4 3 3 3 3 4 4 4 ...
 $ carb: num  4 4 1 1 2 1 4 2 2 4 ...

Extraction de données

Lorsque les données sont grandes, il est souvent utile d’avoir un aperçu des premières lignes. La fonction head() renvoie par défaut les 6 premières lignes d’une table passée en paramètre. On peut aussi lui spécifier le nombre de lignes qu’on désire. La fonction tail() fonctionne de manière identique, mais renvoie les dernières lignes de la table.

> head(mtcars)
                   mpg cyl disp  hp drat    wt  qsec vs am gear carb
Mazda RX4         21.0   6  160 110 3.90 2.620 16.46  0  1    4    4
Mazda RX4 Wag     21.0   6  160 110 3.90 2.875 17.02  0  1    4    4
Datsun 710        22.8   4  108  93 3.85 2.320 18.61  1  1    4    1
Hornet 4 Drive    21.4   6  258 110 3.08 3.215 19.44  1  0    3    1
Hornet Sportabout 18.7   8  360 175 3.15 3.440 17.02  0  0    3    2
Valiant           18.1   6  225 105 2.76 3.460 20.22  1  0    3    1
> head(mtcars, 3)
               mpg cyl disp  hp drat    wt  qsec vs am gear carb
Mazda RX4     21.0   6  160 110 3.90 2.620 16.46  0  1    4    4
Mazda RX4 Wag 21.0   6  160 110 3.90 2.875 17.02  0  1    4    4
Datsun 710    22.8   4  108  93 3.85 2.320 18.61  1  1    4    1
> tail(mtcars)
                mpg cyl  disp  hp drat    wt qsec vs am gear carb
Porsche 914-2  26.0   4 120.3  91 4.43 2.140 16.7  0  1    5    2
Lotus Europa   30.4   4  95.1 113 3.77 1.513 16.9  1  1    5    2
Ford Pantera L 15.8   8 351.0 264 4.22 3.170 14.5  0  1    5    4
Ferrari Dino   19.7   6 145.0 175 3.62 2.770 15.5  0  1    5    6
Maserati Bora  15.0   8 301.0 335 3.54 3.570 14.6  0  1    5    8
Volvo 142E     21.4   4 121.0 109 4.11 2.780 18.6  1  1    4    2
> tail(mtcars, 3)
               mpg cyl disp  hp drat   wt qsec vs am gear carb
Ferrari Dino  19.7   6  145 175 3.62 2.77 15.5  0  1    5    6
Maserati Bora 15.0   8  301 335 3.54 3.57 14.6  0  1    5    8
Volvo 142E    21.4   4  121 109 4.11 2.78 18.6  1  1    4    2

Colonnes

Pour récupérer les valeurs d’une colonne de la table, nous avons 4 façons différentes de le faire, comme présenté ci-dessous. Il faut noter que les trois premières lignes renvoient un vecteur, alors que la dernière renvoie une table (data.frame) réduite. Vous remarquerez qu’on peut spécifier soit le nom de la variable, soit sa position dans le data.frame.

> mtcars$mpg
 [1] 21.0 21.0 22.8 21.4 18.7 18.1 14.3 24.4 22.8 19.2 17.8 16.4 17.3 15.2
[15] 10.4 10.4 14.7 32.4 30.4 33.9 21.5 15.5 15.2 13.3 19.2 27.3 26.0 30.4
[29] 15.8 19.7 15.0 21.4
> mtcars[,"mpg"]
 [1] 21.0 21.0 22.8 21.4 18.7 18.1 14.3 24.4 22.8 19.2 17.8 16.4 17.3 15.2
[15] 10.4 10.4 14.7 32.4 30.4 33.9 21.5 15.5 15.2 13.3 19.2 27.3 26.0 30.4
[29] 15.8 19.7 15.0 21.4
> mtcars[,1]
 [1] 21.0 21.0 22.8 21.4 18.7 18.1 14.3 24.4 22.8 19.2 17.8 16.4 17.3 15.2
[15] 10.4 10.4 14.7 32.4 30.4 33.9 21.5 15.5 15.2 13.3 19.2 27.3 26.0 30.4
[29] 15.8 19.7 15.0 21.4
> mtcars["mpg"]
                     mpg
Mazda RX4           21.0
Mazda RX4 Wag       21.0
Datsun 710          22.8
Hornet 4 Drive      21.4
Hornet Sportabout   18.7
Valiant             18.1
Duster 360          14.3
Merc 240D           24.4
Merc 230            22.8
Merc 280            19.2
Merc 280C           17.8
Merc 450SE          16.4
Merc 450SL          17.3
Merc 450SLC         15.2
Cadillac Fleetwood  10.4
Lincoln Continental 10.4
Chrysler Imperial   14.7
Fiat 128            32.4
Honda Civic         30.4
Toyota Corolla      33.9
Toyota Corona       21.5
Dodge Challenger    15.5
AMC Javelin         15.2
Camaro Z28          13.3
Pontiac Firebird    19.2
Fiat X1-9           27.3
Porsche 914-2       26.0
Lotus Europa        30.4
Ford Pantera L      15.8
Ferrari Dino        19.7
Maserati Bora       15.0
Volvo 142E          21.4

Il est bien évidemment possible de récupérer plusieurs colonnes en une seule étape. Pour ceci, de manière similaire à précédemment, nous avons trois possibilités (le $ n’est plus utilisable dans ce cas). Ces trois exemples renvoient exactement le même résultat. C’est une façon de faire une projection comme en SQL.

> mtcars[c("mpg", "hp")]
                     mpg  hp
Mazda RX4           21.0 110
Mazda RX4 Wag       21.0 110
Datsun 710          22.8  93
Hornet 4 Drive      21.4 110
Hornet Sportabout   18.7 175
Valiant             18.1 105
Duster 360          14.3 245
Merc 240D           24.4  62
Merc 230            22.8  95
Merc 280            19.2 123
Merc 280C           17.8 123
Merc 450SE          16.4 180
Merc 450SL          17.3 180
Merc 450SLC         15.2 180
Cadillac Fleetwood  10.4 205
Lincoln Continental 10.4 215
Chrysler Imperial   14.7 230
Fiat 128            32.4  66
Honda Civic         30.4  52
Toyota Corolla      33.9  65
Toyota Corona       21.5  97
Dodge Challenger    15.5 150
AMC Javelin         15.2 150
Camaro Z28          13.3 245
Pontiac Firebird    19.2 175
Fiat X1-9           27.3  66
Porsche 914-2       26.0  91
Lotus Europa        30.4 113
Ford Pantera L      15.8 264
Ferrari Dino        19.7 175
Maserati Bora       15.0 335
Volvo 142E          21.4 109
> mtcars[,c("mpg", "hp")]
                     mpg  hp
Mazda RX4           21.0 110
Mazda RX4 Wag       21.0 110
Datsun 710          22.8  93
Hornet 4 Drive      21.4 110
Hornet Sportabout   18.7 175
Valiant             18.1 105
Duster 360          14.3 245
Merc 240D           24.4  62
Merc 230            22.8  95
Merc 280            19.2 123
Merc 280C           17.8 123
Merc 450SE          16.4 180
Merc 450SL          17.3 180
Merc 450SLC         15.2 180
Cadillac Fleetwood  10.4 205
Lincoln Continental 10.4 215
Chrysler Imperial   14.7 230
Fiat 128            32.4  66
Honda Civic         30.4  52
Toyota Corolla      33.9  65
Toyota Corona       21.5  97
Dodge Challenger    15.5 150
AMC Javelin         15.2 150
Camaro Z28          13.3 245
Pontiac Firebird    19.2 175
Fiat X1-9           27.3  66
Porsche 914-2       26.0  91
Lotus Europa        30.4 113
Ford Pantera L      15.8 264
Ferrari Dino        19.7 175
Maserati Bora       15.0 335
Volvo 142E          21.4 109
> mtcars[,c(1, 4)]
                     mpg  hp
Mazda RX4           21.0 110
Mazda RX4 Wag       21.0 110
Datsun 710          22.8  93
Hornet 4 Drive      21.4 110
Hornet Sportabout   18.7 175
Valiant             18.1 105
Duster 360          14.3 245
Merc 240D           24.4  62
Merc 230            22.8  95
Merc 280            19.2 123
Merc 280C           17.8 123
Merc 450SE          16.4 180
Merc 450SL          17.3 180
Merc 450SLC         15.2 180
Cadillac Fleetwood  10.4 205
Lincoln Continental 10.4 215
Chrysler Imperial   14.7 230
Fiat 128            32.4  66
Honda Civic         30.4  52
Toyota Corolla      33.9  65
Toyota Corona       21.5  97
Dodge Challenger    15.5 150
AMC Javelin         15.2 150
Camaro Z28          13.3 245
Pontiac Firebird    19.2 175
Fiat X1-9           27.3  66
Porsche 914-2       26.0  91
Lotus Europa        30.4 113
Ford Pantera L      15.8 264
Ferrari Dino        19.7 175
Maserati Bora       15.0 335
Volvo 142E          21.4 109

Lignes

De manière similaire, il est possible de récupérer une ligne spécifique, voire plusieurs lignes, en précisant soit sa position, soit son identifiant.

> mtcars[1,]
          mpg cyl disp  hp drat   wt  qsec vs am gear carb
Mazda RX4  21   6  160 110  3.9 2.62 16.46  0  1    4    4
> mtcars["Mazda RX4",]
          mpg cyl disp  hp drat   wt  qsec vs am gear carb
Mazda RX4  21   6  160 110  3.9 2.62 16.46  0  1    4    4
> mtcars[c(1, 3, 4),]
                mpg cyl disp  hp drat    wt  qsec vs am gear carb
Mazda RX4      21.0   6  160 110 3.90 2.620 16.46  0  1    4    4
Datsun 710     22.8   4  108  93 3.85 2.320 18.61  1  1    4    1
Hornet 4 Drive 21.4   6  258 110 3.08 3.215 19.44  1  0    3    1
> mtcars[c("Mazda RX4", "Datsun 710", "Hornet 4 Drive"),]
                mpg cyl disp  hp drat    wt  qsec vs am gear carb
Mazda RX4      21.0   6  160 110 3.90 2.620 16.46  0  1    4    4
Datsun 710     22.8   4  108  93 3.85 2.320 18.61  1  1    4    1
Hornet 4 Drive 21.4   6  258 110 3.08 3.215 19.44  1  0    3    1

Il est aussi possible de passer un vecteur de booléen, nous permettant de sélectionner des lignes qui respectent une condition (simple ou complexe). C’est une façon de faire une restriction comme en SQL.

> mtcars[mtcars$mpg < 15,]
                     mpg cyl disp  hp drat    wt  qsec vs am gear carb
Duster 360          14.3   8  360 245 3.21 3.570 15.84  0  0    3    4
Cadillac Fleetwood  10.4   8  472 205 2.93 5.250 17.98  0  0    3    4
Lincoln Continental 10.4   8  460 215 3.00 5.424 17.82  0  0    3    4
Chrysler Imperial   14.7   8  440 230 3.23 5.345 17.42  0  0    3    4
Camaro Z28          13.3   8  350 245 3.73 3.840 15.41  0  0    3    4
> mtcars[mtcars$mpg < 15 & mtcars$qsec < 16,]
            mpg cyl disp  hp drat   wt  qsec vs am gear carb
Duster 360 14.3   8  360 245 3.21 3.57 15.84  0  0    3    4
Camaro Z28 13.3   8  350 245 3.73 3.84 15.41  0  0    3    4

Cellules

En combinant les deux opérations ci-dessus, il est possible d’obtenir le contenu d’une cellule (exemple 1), ou de plusieurs cellules (exemple 2 à 5).

> mtcars[1,1]
[1] 21
> mtcars[1:5, 1]
[1] 21.0 21.0 22.8 21.4 18.7
> mtcars[1, 1:3]
          mpg cyl disp
Mazda RX4  21   6  160
> mtcars[1:5,1:3]
                   mpg cyl disp
Mazda RX4         21.0   6  160
Mazda RX4 Wag     21.0   6  160
Datsun 710        22.8   4  108
Hornet 4 Drive    21.4   6  258
Hornet Sportabout 18.7   8  360
> mtcars[mtcars$mpg < 15 & mtcars$qsec < 16, c("hp", "disp")]
            hp disp
Duster 360 245  360
Camaro Z28 245  350

Exercices

Création de vecteurs

  1. Créer un vecteur v1 qui va de \(1\) à \(-1\) par pas de \(-0.25\)

  2. Créer un vecteur v2 qui va de \(0\) à \(100\) d’une longueur de \(23\)

  3. Créer un vecteur v3 qui contient les chaînes : "1ère année", "2ème année", "LP"

  4. Créer un vecteur v4 qui répéte trois fois la chaîne "promo"

  5. Regrouper les vecteurs v3 et v4, pour avoir le vecteur v5 suivant

[1] "promo=1ère année" "promo=2ème année" "promo=LP"        
  1. Améliorer le code suivant pour avoir le vecteur v6 suivant
[1] "promo='1ère année'" "promo='2ème année'" "promo='LP'"        
  1. Créer automatiquement le vecteur v7 qui suit à l’aide des fonctions c(), seq(), paste(), rep()
[1] "x1" "y1" "x2" "y2" "x3" "y3" "x4" "y4"

Données présentes

Sur le jeu de données swiss

  1. Donner le nombre de lignes et le nombre de colonnes, séparemment

  2. Afficher les noms de variables

  3. Afficher les 10 premières lignes

  4. Afficher les colonnes Agriculture et Education, en data.frame

  5. Afficher les lignes pour lesquelles la variable Infant.Mortality est inférieure à 17

  6. Combiner les deux demandes précédentes