Introduction à R

Base du langage, packages, Rstudio et documentation



Une calculatrice

Le langage R offre les mêmes fonctionnalités qu’une calculatrice.
Vous pouvez utiliser tous les opérateurs arithmétiques.

Nom Opérateur Exemple Résultat
Addition + 5 + 3 8
Soustraction - 5 - 1 4
Multiplication * 5*5 25
Division / 5/5 1
Puissance ^ 5^5 3125
Modulo %% 5 %% 5 0
Quotient Décimal %/% 5 %/% 5 1

Une calculatrice

3 + 5
## [1] 8
(3+4) * 5^3 / 10
## [1] 87.5
(3.2 + 4.1) * 5.9^3 / 10.002
## [1] 149.8967

Une super calculatrice

R permet également l’utilisation d’opérateurs relationnels

Conditions Opérateur Exemple Résultat
plus petit que < 5 < 5 FALSE
plus grand que > 5 > 5 FALSE
plus petit ou égal à <= 5 <= 5 TRUE
plus grand ou égal à >= 5 >= 5 TRUE
égal à == 5 == 5 TRUE
différent de != 5 != 5 FALSE
présent dans %in% 5 %in% 1:5 TRUE

Une super calculatrice

# x égale à y ?
5 == 5
## [1] TRUE
# x différent de y ?
5 != 5
## [1] FALSE
# x présent dans y ?
# 5 %in% c(7,4,5,3)
c(1,7,3,2) %in% c(7,4,5,3)
## [1] FALSE  TRUE  TRUE FALSE

Une super calculatrice

Et d’opérateurs logiques :

Condition Opérateur
différent de !
et &
ou I
ou exclusif xor()
valeur manquante is.na()
valeur nulle is.null()
vrai isTRUE()
faux isFALSE()

Une super calculatrice

# Valeur manquante ?
is.na(NA)
## [1] TRUE
# Différent de valeur manquante ?
!is.na(13)
## [1] TRUE
# Contrôle à deux condtions
!is.na(13) & 2 == 2
## [1] TRUE

Et bien plus…

Des milliers de fonctions pour manipuler et analyser vos données

# Arrondir un nombre
round(12.33453)
## [1] 12
# Nombre de caractères
nchar("Bla bla bla...")
## [1] 14

Et bien plus…

Des fonctions pour représenter vos données

# Représentation graphique
plot(x = 1:20, y = 11:30)

objets <- R

Programmation Orientée Objet ?


Tout ce que l’on crée dans R sont des objets…

Mais il ne s’agit pas (comme Python) d’un langage de POO!


La Programmation Orientée Objet est un paradigme de programmation basé sur le concept d’objets, qui peuvent contenir des données et métadonnées (attributs), et qui sont associés à des procédures, souvent appelées méthodes.


Il est néanmoins possible de faire de la POO avec R…


Créer un objet

Pour créer un objet, donnez lui un nom et assignez-lui un contenu avec le symbole :

<-

obj <- 15

obj + 15
## [1] 30
obj <- (obj + 45) / 2

obj
## [1] 30

Créer un objet

Assignez différents types de données :

Type définition Exemple
numeric nombre 3 ou 4.23
integer nombre entier 3
double nombre double 4.23
logical logique ou booléen TRUE ou FALSE
string chaîne de caractères “Hello”
factor string (modalités prédéfinies) “Hight”
date date formatée 2020-12-14
NA absence de valeur (tout type) NA

Créer un objet

obj <- NA
obj <- 3.14 
obj <- FALSE    

obj <- "Bla bla..." 
obj <- factor("A", levels = c("A", "B", "C"))
obj <- as.Date("2020-10-08")

# Type de données ?
class(obj)
## [1] "Date"
# Contenu de mon objet ?
print(obj)
## [1] "2020-10-08"

Les fonctions

Une fonction est un objet

Une fonction contient une série de commandes (code) qui effectuent une tâche prédéfinie. Elle prend des informations (arguments) en entrée et renvoie un résultat

elle <- "Julie"  
lui <- "Thomas"  

# paste() pour concaténer des chaînes de caractères
elle_lui <- paste(elle, lui, sep = " aime ")

elle_lui
## [1] "Julie aime Thomas"
# gsub() pour remplacer un 'pattern' de caractère
gsub(pattern = "Thomas", replacement = "Tristan", x = elle_lui)
## [1] "Julie aime Tristan"

Les fonctions

Les fonctions peuvent être :

    • Mises à disposition par le R base (fonctions primitives ou standards)
    • Mises à disposition par un package
    • Développées en local par vous-même.

Elles s’utilisent toujours de la même façon : nom()

# Construction d'une fonction, qui écrit "Hello" dans la console
fonction_hello <- function() { print("Hello") }

# Utilisation de la fonction
fonction_hello()
## [1] "Hello"

Les arguments

Le plus souvent, des arguments doivent être renseignés pour utiliser une fonction. Il suffit de leur attribuer une valeur.

x <- seq(from = -20, to = 22, by = 2)
y <- rep(10:20,  2)

plot(x , y , type = "b",
     pch = 18, cex = 1.2, lwd = 2, col= "blue",
     main = "Mon premier plot avec R", 
     xlab = "Ma variable en abscisse", ylab = "Ma variable en ordonnée")

Les objets

De nombreux objets R adaptés aux différents types de données :

    • Vector - liste d’éléments de même nature
    • Data.frame - Tableau de données
    • Matrix - Matrice
    • Array - Ensemble de matrices
    • List - Liste d’objet
    • Factor - vecteur avec une liste de modalités prédéfinies
    • Simple feature - Données géographiques
    • Time serie - Série temporelle

Vector

Le vecteur est l’objet de base de R. Il permet de stocker un ou plusieurs éléments du même type.

# Vecteur d'un unique élément de type string
nom <- "Martina"

La fonction c() permet de construire un vecteur de plusieurs éléments,

noms <- c("Martina", "Leo", "Inès", "Joshua")

noms
## [1] "Martina" "Leo"     "Inès"    "Joshua"

Vector

Pour naviguer dans cet objet unidimensionnel, utilisez les crochets.

# Sélection du premier élément
noms[1]

# Sélection des éléments 2 et 4
noms[c(2,4)]
## [1] "Leo"    "Joshua"
# Assigner dans un nouvel objet pour garder en mémoire
Select_nom <- noms[c(1,3)]

Select_nom
## [1] "Martina" "Inès"

Data.frame

Le data.frame correspond au tableau de données classique. il se compose de plusieurs colonnes pouvant contenir des données de nature différente. Chaque colonne d’un data.frame est un vecteur.

# Construction de plusieurs vecteurs de même longueur

nom <- c("Modibo Keïta", "Moussa Traoré", "Alpha Oumar Konaré")
date_naissance <- c("1915-06-04", "1936-09-25", "1946-02-02")
annee_arrivee_pouvoir <- c(1960, 1968, 1992)
duree_au_pouvoir <- c(8, 23, NA)
parcours_militaire <- c(FALSE, TRUE, FALSE)


Utilisez la fonction data.frame() pour construire un tableau

Data.frame

Utilisez la fonction data.frame() pour construire un tableau

MyTab <- data.frame(nom,
                    date_naissance,
                    annee_arrivee_pouvoir,
                    duree_au_pouvoir,
                    parcours_militaire )

MyTab
##                  nom date_naissance annee_arrivee_pouvoir duree_au_pouvoir
## 1       Modibo Keïta     1915-06-04                  1960                8
## 2      Moussa Traoré     1936-09-25                  1968               23
## 3 Alpha Oumar Konaré     1946-02-02                  1992               NA
##   parcours_militaire
## 1              FALSE
## 2               TRUE
## 3              FALSE

Data.frame

Utilisez les crochets pour naviguer dans un tableau :
MyTab[ ligne , colonne ]

## SELECTION PAR INDEX
# Première ligne et toutes les colonnes
MyTab[ 1 , ]

# Toutes les lignes  et colonnes 1, 3 et 5
MyTab[  , c(1,3,5)]

# 2e ligne et colonnes 1 et 5
MyTab[2, c(1,5)]

## SELECTION PAR NOM
# 2e ligne et colonnes 1 et 5
MyTab[ 2 , c("nom", "parcours_militaire")]
##             nom parcours_militaire
## 2 Moussa Traoré               TRUE

Data.frame

Vous pouvez également utiliser le signe $ pour séléctionner une colonne :

MyTab$date_naissance

## Uilisation du $
# Séléction colonne 'date_naissance'
MyTab$date_naissance

# Valeur de la seconde ligne dans la colonne 'date_naissance'
MyTab$date_naissance[2]

# Colonne 'parcours_militaire', ligne 1 et 3
MyTab$date_naissance[c(1,3)]
## [1] "1915-06-04" "1946-02-02"

Data.frame

Utilisez les différents opérateurs pour sélectionner par condition :

# Séléction par condition
MyTab[ MyTab$duree_au_pouvoir > 20 , ]
 
# Condition ET Condition
MyTab[MyTab$annee_arrivee_pouvoir > 1965  &  MyTab$parcours_militaire == FALSE, ]

# Condition OU Condition
MyTab[MyTab$duree_au_pouvoir >= 10  |  is.na(MyTab$duree_au_pouvoir), ]

# Utilisation de fonction
MyTab[nchar(MyTab$nom) > 15, ]
##                  nom date_naissance annee_arrivee_pouvoir duree_au_pouvoir
## 3 Alpha Oumar Konaré     1946-02-02                  1992               NA
##   parcours_militaire
## 3              FALSE

list

Une liste permet de stocker plusieurs objets (peu importe le type) en un seul. Une liste est une collection d’objet.

Utilisez la fonction list() pour construire une liste

# Vecteur de chaînes de caractères
noms <- c("Martina", "Leo", "Inès", "Joshua")
# Vecteur de numeric
ages <- c(21, 20, 25, 18)
# data.frame
tablo <- data.frame(noms, ages)
# fonction
fonction_hello <- function() { print("Hello") }

# Construction d'un objet list
Ma_list <- list(noms, ages, tablo, fonction_hello)

C’est un super objet très utile et puissant.
Cet objet est utilisé par plusieurs packages de référence

List

Pour naviguer dans une liste, utilisez des doubles crochets :
Ma_list[[ index ]]

# Séléction du 1er objet de Ma_list
Ma_list[[1]]
## [1] "Martina" "Leo"     "Inès"    "Joshua"
# Séléction au sein d'un objet d'une list :
# 2e ligne et 1ère colonne de mon objet 3
Ma_list[[3]][4 , 2]
## [1] 18

R base + packages

R base

Le langage R offre 2321 fonctions de base* stockées dans 7 packages standards, installés et chargés automatiquement :

    • base = 1247 fonctions de base qui permettent à R de fonctionner comme un langage
    • utils = 224 fonctions utilitaires (ex : installation de package, import/export…)
    • stats = 451 fonctions statistiques pour les calculs et la génération de nombres aléatoires
    • grDevices = 109 fonctions pour la gestion des périphériques graphiques
    • graphics = 87 fonctions graphiques
    • methods = 203 fonctions pour définir des méthodes et classes pour les objets R
    • datasets = 416 jeux de données d’exemples

633 fonctions supplémentaires* sont également mises à disposition par l’intermédiaire de 5 autres packages pré-installés (grid, splines, stats4, tcltk, tools), mais qui ne sont pas chargés automatiquement.

* Calculé le 2023-01-16

R base

Les fonctionnalités standards (ou primitives) proposées par R permettent de réaliser beaucoup de choses

Il est cependant parfois nécessaire d’installer des packages
pour profiter de certaines fonctionnalités :

    • Gérer des types de données spécifiques (ex : géographique, image, son…)
    • Optimiser son code (fonction codées en C++, parallélisation…)
    • Interagir avec d’autres outils (web scraping, production de support…)
    • Utiliser des méthodes d’analyses spécifiques (ex : réseau, séquence, NLP…)
    • Produire des représentations graphiques particulières et/ou élégantes

Packages du CRAN

19051* packages sont disponibles sur le Comprehensive R Archive Network

L’installation d’un package peut se faire en clic-bouton avec Rstudio. Cette opération n’est à réaliser qu’une fois, sauf si vous souhaitez mettre à jour le package.

# Utilisez install.packages() pour installer un package en ligne de code
# Exemple avec le package "mapsf"
install.packages("mapsf")

Pour utiliser les fonctions du package, chargez la librairie :

library(mapsf)

Il est nécessaire de charger la librairie à chaque nouvelle session R

* Calculé le 2023-01-16

Autres ?

Le Comprehensive R Archive Network est le système officiel de stockage et de mise à disposition des packages R. Il existe d’autres sources :

    • Bioconductor qui concentre des packages portant sur l’analyse des données génomiques
    • R-forge qui est une plateforme orientée vers les développeurs
    • GitHub qui est un service web d’hébergement et de gestion de développement de logiciels, utilisant le logiciel de gestion de versions Git

De nombreux packages fonctionnels et très intéressants sont uniquement disponibles sur GitHub… Attention, ils ne bénéficient pas du système de contrôle offert par le CRAN !

GitHub

GitHub permet aux développeurs de programmer de manière collaborative. Beaucoup de développeurs y partagent leur package, et profitent ainsi de contributions externes

GitHub

Un package peut connaître une longue période de développement. Cela ne l’empêche pas d’être opérationnel. C’est par exemple le cas du package apinsee destiné à faciliter l’authentification aux API de l’INSEE. Pour l’installer depuis GitHub :

# Le package remotes permet d'installer un package stocké sur GitHub
install.packages("remotes")

# Chargez la librairie
library(remotes)

# Utilisez la fonction install_github() en indiquant le nom du dépôt
install_github("inseefrlab/apinsee")

# Chargez la librairie
library(apinsee)

Sur Windows, il est nécessaire d’installer Rtools pour utiliser les packages qui interagissent avec le système d’exploitation (remotes, devtools…)

PACKAGES POPULAIRES







Une opération… plusieurs solutions !


Une opération peut être réalisée de plein de façons différentes, en utilisant des fonctions primitives ou provenant de packages.

Chacun ses préférences. Mais il est peut être utile de connaître les utilisations les plus courantes

Petit tour d’horizon…

Import

R base

Fichiers texte

readr

Tableaux (csv, tsf, fwf, log…)

readxl

Fichiers Excel

haven

Données SPSS, Stata et SAS

Collecte

rvest

web scraping (Rstudio)

plumber

Créer interface API

rselenium

web scraping (Selenium)

Interfaces d’API et BD

eurostat - rOpenGov package - Interface API Eurostat

insee - Données et métadonnées INSEE (BDM)

wbstats et WDI - Interface API et données Banque mondiale

wpp2017 - Données UN (World Population Prospects 2017)

rnaturalearthdata - rOpenSci package - Données Natural Earth

osmdata - rOpenSci package - Interface API OpenStreetMap

rtweet - rOpenSci package - Interface API Twitter

tuber - Interface API Youtube

spotifyr - Interface API Spotify

googleAuthR, googleAnalyticsR, searchConsoleR… - API’s Google

Manipulation

R base

Manipulation de données

data.table

Manipulation de données

dplyr

Manipulation de données

tidyr

Manipulation de tableaux

lubridate

Manipulation de dates

stringr

Chaînes de caractères

Tidyverse

Collection de packages conçues pour fonctionner ensemble et basés sur une philosophie commune.
Ils abordent un très grand nombre d’opérations courantes dans R, comme l’import/export, web scraping, manipulation de données, visualisation, programmation…

Elles sont en grande partie issues du travail d’Hadley Wickham, développeur emblématique qui travaille désormais pour RStudio.

Statistique mulivariée



R base

Statistique univariée, bivariée,
test de probabilité…

easystats

Suite de packages pour faciliter
l’utilisation de techniques statistiques avancées




FactoMineR

Analyse exploratoire multidimensionnelle
cf. FactoInvestigate, factoextra, Factoshiny

ade4

Analyse exploratoire multidimensionnelle
avec procédures exploratoires d’essence euclidienne




MASS

Fonctions issues du livre
Modern Applied Statistics with S

ExPosition

Analyse exploratoire multidimensionnelle
Décomposition de la valeur singulière

Traitement d’enquête


R base

Statistique basique,
tableaux croisés…

survey

Construction de plan
d’échantillonnage complexe

questionr

Contient un addin
(interface graphique)

Analyse Textuelle



quanteda

Manipulation et analyse de corpus
Issue de l’ERC QUANTESS.

spacyr

Traitement automatique du langage
Adaptation de la librairie Python spaCy




tm

Text mining
Statistique textuelle

tidytext

Text mining - compatible tidyverse
Statistique textuelle




text2vec

Text mining et NLP
Bonne gestion de la mémoire

Package avec interface graphique :

R.temis - Manipulation et analyse de corpus

RcmdrPlugin.temis - Interface graphique pour R.temis

IRaMuTeQ - Interface de R pour les Analyses Multidimensionnelles de Textes et de Questionnaires

Analyse de réseau



igraph

Analyse de réseau
Disponible en c/c++, python et Mathematica

tnet

Analyse pondérée, bimodale
et longitudinale des réseaux




bipartite

Analyse de réseau biparti
cf. FactoInvestigate, factoextra, Factoshiny

blockmodeling

Modélisation de réseau valué




Rsiena

Simulation de modèles stochastiques

Données géographiques

sf

Import, manipulation et analyse
de données vectorielles

stars

Import et manipulation
de données raster

raster

Import, manipulation et analyse
de données raster

terra

Analyse de données raster
(En développement)

Représentation Graphique

R base

Représentation graphique standard
nuage de point, histogramme, Boxplot…

ggplot2

Représentation graphique avancée
basée sur la grammaire graphique

r2d3

Représentation graphique dynamique
Adaptation librairie JavaScript D3

plotly

Graphiques interactifs
Adaptation librairie JavaScript

Cartographie

tmap

Cartographie thématique

mapsf

Cartographie thématique

mapview

Carte interactive
basée sur API Leaflet


leaflet

Adaptation librairie JavaScript

Valorisation

rmarkdown

Literate programming
Documents balisés en markdown

knitr

Compiler les documents
markdown -> pandoc

pagedown

Créer PDFs avec CSS (comme LaTeX)
Livre, thèse, article, poster…

bookdown

Facilite la rédaction de livre

Valorisation

xaringan

Création de diaporama

blogdown

Construction de site

shiny

Application interactive

Modèles de mise en page :

rmdformats - Templates documents HTML

learnr - Tutoriel interactif

Reveal.js - Diaporama

flexdashboard - Tableau de bord

l’IDE Rstudio

L’Environnement de Développement Intégré mis à disposition par Rstudio a sans aucun doute participé à la croissance du nombre d’utilisateur.rice.s de R.

Cette interface offre une aisance de développement autant appréciée par les débutants que par les développeurs expérimentés.

Une interface complète

Fonctionnalités clic-button

De nombreuses fonctions sont disponibles en bouton dans l’IDE Rstudio

Installation de packages

Export de graphique

Fonctionnalités clic-button

Import/export de données

Interface personnalisable

Les projets Rstudio

RStudio propose d’organiser son travail en projet. L’idée principale est de rassembler tous les fichiers d’un même projet dans un répertoire dédié.

    • Facilite le travail discontinu
    • Améliore la portabilité de son travail
    • Garantie la reproductibilité de son travail

Les projets Rstudio

A l’ouverture d’un projet :

    • Le répertoire du projet est considéré par défaut comme le répertoire de travail
    • Rstudio restaure à l’identique l’état de la session lors de sa dernière clôture (option)
    • L’historique des commandes saisies lors des précédentes séances de travail est disponible

Aide et documentation


C’est l’un des points forts du langage

Inclusion et partage sont au coeur de la communauté R

Les réponses à vos questions existent forcément

Mais et comment chercher ?

Auto-complétion

La fonctionnalité d’auto-complétion proposée par Rstudio peut dans un premier temps être très efficace. Utilisez la touche tab.


Auto-complétion

Documentation officielle

Les packages (base et CRAN) sont accompagnés d’une documentation.
Vous pouvez y accéder en ligne de commande ou en clic-bouton :

# Chargement de la librairie
library(mapsf)

# help() ou ?
help(mapsf)
?mapsf

# Sur un package ou sur une fonction
help(mf_map)
?mf_map

D’autres fonctions de recherche et
d’accès à la documentation sur
r-project.org

Vignette, cheatsheet & site web

Certains packages proposent de la documentation plus digeste, comme une vignette, une cheatsheet, voire même un site web

Site web du package sf

Vignette du package MTA

Vignette

La vignette est un document qui décrit en profondeur le concept et le fonctionnement d’un package. Il y a parfois plusieurs chapitres…

# Vignettes des packages installés
browseVignettes()

# Les vignettes d'un package installé
browseVignettes("mapsf")

Vignette du package mapsf

Cheatsheet

La Cheatsheet (antisèche) est un format crée par Rstudio. Il s’agit d’un document qui résume brièvement (une ou deux feuilles) les fonctionnalités d’un package.

Retrouvez la majorité des cheatsheets sur Rstudio

Site web

De nombreuses librairies de référence possèdent leur site web

ggplot2

Représentation graphique

igraph

Analyse de réseau

plumber

Adaptation API

La communauté R

La communauté R est très active et s’avère prolifique en matière de partage et de documentation :

Conférences, groupes d’utilisateur.rice.s, manuels, blogs, forums, agrégateurs, MOODLE, MOOC, vidéos, listes de diffusion, réseaux sociaux… ex :

Il y en a pour tous le monde !

Les manuels

Il existe des centaines de manuels dans différentes langues.
Certains sont focalisés sur une discipline ou une fonctionnalité.

Quelques manuels généralistes :

Quelques manuels thématiques :

Agrégateurs & listes

Plusieurs sites internet collaboratifs permettent
l’agrégation de contenu ou l’inventaire de ressources.

Agrégateurs de contenu

    • Rweekly - agrégateur de ressources diverses
    • R-bloggers - agrégateur de billets de blog d’actualité et de tutoriels
    • Rzine - site de référencement de documentation sur la pratique de R en SHS

Inventaires de ressources :

    • Awesome R - liste collective de packages et d’outils
    • Frrrenchies - liste de ressources francophones ou utiles pour les Français.

Blogs

Certains blogs, parfois très complets, sont de véritables mines d’or !



    • Analyse-r - traitement d’enquête - Joseph Larmarange
    • Dimension - statistique & sociétés - Jean-Herman Guay
    • R-atique - statistique - Lise Vaudor
    • Rgeomatic - géomatique - Timothée Giraud
    • schochastics - analyse de réseau - David Schoch

Forums & listes de diffusion

Vous avez une question ?

Forums

    • Stackoverflow - forum d’entraide généraliste
    • Grrr - plate-forme Slack de discussion instantanée francophone sur R
    • Cirad - forum francophone d’échange sur R

Listes de diffusion

    • R-soc - utilisation du logiciel R en sciences sociales
    • Semin-R - liste de diffusion du groupe d’utilisateur.rice.s semin-R

Réseaux sociaux

La communauté R est très active sur les réseaux sociaux


Suivez la communauté
sur twitter

#rstat

Plusieurs chaînes Youtube existent :

Réalisé avec…









R version 4.2.2 Patched (2022-11-10 r83330)

Diapositives libres (CC BY 3.0)


Consultation :

https://huguespecout.github.io/Intro_R_Rstudio_FR/


Code source :

https://github.com/HuguesPecout/Intro_R_Rstudio_FR/


Remerciements


Timothée Giraud (CNRS)

Violaine Jurie (Université de Paris)

François Rebaudo (IRD)

Ronan Ysebaert (Université de Paris)


REVEAL.JS

Merci de votre attention

On continue ?


Exemple appliqué :
Vers une chaîne de traitement reproductible

  • Avant propos et objectifs
  • Mise en œuvre d’une chaîne de traitement
  • Transposer son analyse
  • Documenter son code
  • Reproduisez l’analyse !


Voir le diaporama