Blog ENI : Toute la veille numérique !
-25€ dès 75€ sur les livres en ligne, vidéos... avec le code FUSEE25. J'en profite !
Accès illimité 24h/24 à tous nos livres & vidéos ! 
Découvrez la Bibliothèque Numérique ENI. Cliquez ici

Types de variables et opérations R

Introduction

R est un outil statistique certes, mais un langage de programmation tout de même ; de ce fait, ce chapitre sera dédié à la présentation des éléments de syntaxe de base du langage tels que la création de variables et leur cycle de vie, les différents types de variables selon la classe à laquelle l’objet cible est associé ou selon le mode de stockage de l’objet en mémoire.

Comme on découvrira l’équivalent des types primitifs, à savoir les nombres, les chaînes de caractère et les booléens, on abordera également les opérations de base qui vont permettre leur manipulation. On finira par la présentation des packages qui sont des outils très importants pour une expérience effective avec R.

Session interactive R

R permet d’exécuter des instructions de toutes sortes grâce à sa puissante console qui peut interpréter et évaluer des opérations, même les plus complexes. Lorsqu’une commande est instruite, R répond d’une manière ou d’une autre.

1. La console R

Que l’on ait lancé R à travers l’invite de commande ou avec un IDE, le premier composant qui apparaît au début d’une session est tout simplement celui-ci, la console R :

images/02EP01.png

a. Exécution d’une instruction

C’est à la suite du prompt ">" que les instructions R sont évaluées ou que les scripts sont exécutés. Cette console est interactive et, comme la plupart des interpréteurs modernes, utilise la boucle d’évaluation REPL pour Read-Evaluate-Print-Loop, autrement dit lorsqu’une instruction est saisie à la suite du prompt et que l’on tape la touche [Entrée], l’interpréteur fait alors son travail :

images/02EP02.png

Plus explicitement :

  • R : lit l’instruction (1 + 2 + 3 + 4).

  • E : l’évalue (calcule le résultat de) cette instruction ou expression.

  • P : imprime ou affiche en sortie le résultat (10) de l’évaluation.

  • L : boucle et repasse la main au processus lecture R, signalé par la présence du curseur sur une nouvelle ligne devant le prompt attendant une nouvelle instruction comme ci-dessus.

Cette console R est comme une puissante calculatrice, l’instruction peut être une opération simple comme dans l’illustration précédente ou contenir l’invocation de fonctions ou d’expressions ou de manière générale d’objets plus complexes.

On peut rappeler une instruction passée avec les touches directionnelles haut et bas du clavier. Comme l’illustre la capture d’écran suivante, en appuyant deux fois sur la touche directionnelle Haut du clavier on retrouve la première opération :

images/02EP03.png

R a réservé un objet spécial, chargé de contenir le dernier résultat affiché...

Les variables R

1. Création de variables

Pour rendre persistante ou réutilisable une valeur ou une donnée, on utilise en général en programmation une variable. Une variable R est tout simplement un identifiant d’objet ou un nom attribué à un objet (l’objet étant la donnée ou la valeur ou le résultat). Contrairement à certains langages, R n’exige aucune déclaration de variable, une variable est créée lorsqu’un objet lui a été affecté ou assigné.

On dispose dans R de deux opérateurs d’affectation ou d’assignation. Le traditionnel et plus commun signe d’égalité "=" et les très originales combinaisons de signes d’infériorité ou supériorité avec le tiret de la touche six ou signe négatif "<-" ou "->" qui sont propres à R :

images/02EP24.png

L’opérateur "<-", ou "->", est le plus répandu, l’objectif étant de mettre plus en avant le style d’écriture R c’est ce style qui va être utilisé tout au long de cet ouvrage. Pour aller plus vite, on peut dans RStudio obtenir cet opérateur avec la combinaison de touche [Alt] et "-" et dans Visual Studio R, avec la combinaison "=" + [Tab].

Ainsi donc, on peut créer des variables à partir de tout type d’objet dans R, des moins au plus complexes, de structures de données et de fonctions, de fichiers, etc., il peut s’agir d’une simple variable identifiant des données vecteurs atomiques :

images/02EP25.png

Aux variables pointant sur des objets plus complexes :

images/02EP26.png

Les variables en mémoire sont stockées dans un environnement global toutefois, à l’aide de la fonction address() appartenant au package pryr (voir plus loin comment installer un package), il est possible de recouvrer la position en mémoire ou adresse mémoire d’un objet :

images/02EP27.png

L’affectation de la variable x à y soulève un point important que l’on a mentionné dans la définition d’une variable. En effet, cette dernière n’est qu’un nom qu’on associe à un objet, comme on peut le voir l’objet n’a pas bougé de son adresse initiale...

Types de vecteur atomique

Il n’existe pas de type primitif avec R, mais des objets de classes similaires en caractéristiques. Ainsi, on distingue les données de types numériques, des chaînes de caractères et des booléens qui sont l’équivalent des types primitifs connus dans les langages de première génération tels que le C, mais on a également les dates.

1. Les nombres

On va distinguer parmi les nombres la classe des nombres dits numeric, qui englobent l’ensemble des réels, de la classe des nombres dits complex.

a. Créer des objets numériques

Ils incluent aussi bien les entiers naturels que les nombres réels en général. Pour distinguer les objets numériques des autres types, on peut utiliser class() ou mode() pour les identifier :

images/02EP59.png

Comme on peut le voir, tout nombre appartient par défaut à la classe des numériques et est encodé comme un nombre à virgule flottante dit double.

Pour s’en rendre compte, on utilise la fonction typeof() ou storage.mode() qui renvoie le type spécifique de l’objet :

images/02EP60.png

Ou utilisera la fonction de test is.double() (on a naturellement as.double() pour coercer tout objet en double si sa structure le permet) :

images/02EP61.png

Il est également permis d’utiliser la notation scientifique des réels en général avec la lettre ’e’, par exemple :

images/02EP62.png

Toutefois, on peut créer des entiers naturels en faisant précéder le nombre par la lettre L ou en utilisant la fonction de coercition as.integer() :

images/02EP63.png

On constate également que l’on dispose de la fonction is.integer() pour tester si un nombre est de type entier naturel.

b. Créer des nombres complexes

R gère également les nombres complexes. L’essentiel des opérateurs et fonctions qui s’appliquent aux réels est applicable aux complexes aussi. Pour qu’un nombre complexe se crée, il faut ajouter à un nombre réel une partie complexe dite imaginaire. Cette partie imaginaire est un réel suivi de la lettre i :

images/02EP64.png

Comme on peut le voir, les nombres complexes sont encodés différemment. Contrairement aux autres qui sont des numeric, ils sont de la classe complex, et stockés comme tels.

On peut coercer tout autre nombre ou nombre entre...

Les dates et heures

R gère également les données relatives au temps qui sont prises en charge par les classes Date pour les dates et POSIXt pour les dates et heures. Même si elles disposent de leurs propres classes, les dates et heures sont stockées comme des objets numériques.

Les symboles de formatage de dates et heures reconnaissables par R sont présentés dans le tableau suivant :

Symboles

Unités

%S

Secondes (00-60)

%M

Minutes (00-60)

%H

Heures (01-24)

%I

Heures (01-12)

%d

Jour du mois en valeur numérique (01-31)

%A

Jour du mois en toutes lettres (lundi - dimanche)

%a

Jour du mois en lettre abrégée (lun.- dim.)

%m

Mois en valeur numérique (01-12)

%B

Mois en toutes lettres (Janvier - Décembre)

%b

Mois en lettre abrégée (Janv. - Déc.)

%y

Année abrégée à deux chiffres (2017 => 17)

%Y

Année entière à quatre chiffres (2017 ou 2000)

%W

Numéro de la semaine dans l’année

%c

Date et heure locale

%x

Date locale

%X

Heure locale

%z

Fuseau horaire

Ils servent à encoder et à formater des dates et heures.

1. La classe Date

a. Création des dates

Pour manipuler les dates, la classe la plus simple est Date. Son constructeur, la fonction as.Date(), prend en argument une date représentée par une chaîne de caractères obéissant à un certain format. Par défaut, seul le format standard (ISO 8601) est reconnu année/mois/jours ou année-mois-jours :

images/02EP79.png

Toutefois, on peut fournir une date de format quelconque tout en prenant soin d’en spécifier le formatage...

Les valeurs ou données spéciales

1. Les valeurs manquantes ou Missing data

R représente les valeurs manquantes par NA, en anglais Not Available. Pour vérifier si un objet est de type NA, on utilise la fonction is.na() :

images/02EP91.png

Si en effet, la variable ou l’objet est une valeur manquante, alors la fonction renvoie TRUE sinon elle renvoie FALSE, c’est la raison pour laquelle cette fonction is.na() est très intéressante pour détecter des NA surtout dans le traitement de jeux de données plus importants en volume.

En général lorsque l’on tente de réaliser des opérations de coercition numérique et que la donnée de départ n’est pas un nombre, alors on obtient un NA, ou lors de l’importation de données méconnaissable par R :

images/02EP92.png

On apprendra par la suite dans les chapitres à venir comment gérer les valeurs manquantes, car comme on peut le remarquer ci-dessous toutes les opérations renvoient NA quand on mixe ce dernier avec n’importe quel type de données :

images/02EP93.png

2. Inf ou infini

Inf apparaît quand on effectue certaines opérations mathématiques dont les résultats tendent vers l’infini, ou que la valeur est trop grande pour que R la gère, il en résulte alors l’infini :

images/02EP94.png

Pour tester si une variable ou un objet est Inf ou fini, on utilise...

Les packages

dplyr, devtools, foreign, cluster, ggplot2… sont les packages les plus téléchargés en 2016, selon le blog Revolution Analytics dédié aux news sur R. Qu’est-ce donc qu’un package ? Structurellement, un package est une collection de fonctions, de jeux de données et d’objets structurés et documentés. Les packages sont des outils incontournables dans R, on ne peut pas faire sans ! Par défaut, lorsque le noyau R est installé, il contient déjà des packages, à savoir base, graphics, grDevices, methods, et utils, l’équivalent de ce qu’on appelle la bibliothèque standard dans les langages tels que C/C++ ou Python, qui sont automatiquement chargés dans l’environnement R au démarrage du noyau.

Mais la plupart du temps, on est amené à charger manuellement les packages après les avoir téléchargés.

1. Gestion des packages

a. Télécharger et installer un package

Cas d’un package sur CRAN

CRAN (Comprehensive R Archive Network) est le dépôt officiel et le plus populaire des packages R, on a bien entendu également Bioconductor, mais aussi MRAN (Microsoft R Application Network), qui offre un outil de recherche de package sur CRAN) plus récent depuis Microsoft R Open. On y trouve plus de 10 000 packages à ce jour, téléchargeables gratuitement avec la fonction install.packages(). Voici un exemple d’installation de package depuis CRAN/MRAN.

images/02EP98.png

Cette fonction peut prendre en charge le téléchargement et l’installation de plusieurs packages en même temps dont les noms doivent être fournis sous forme de vecteur c() :

images/02EP99.png

Pour ne pas surcharger le serveur, CRAN dispose de plusieurs miroirs dont il est possible d’obtenir la liste avec getCRANmirrors() dont voici un extrait des URL par ville.

images/02EP100.png

On peut ensuite choisir le miroir dont on est le plus proche pour télécharger des packages (c’est vivement recommandé)....