Qu’est-ce qu’un package ?

Un package est un ensemble de fonctions documentées visant à la réalisation d’une tâche particulière.

En poursuivant cette série de tutoriels vous serez notamment amenés à travailler avec le package dplyr qui vise à réaliser un ensemble d’opérations et de manipulations de base sur les tableaux de données, et le package ggplot2 qui vise à produire des graphiques en s’appuyant sur les principes de la grammaire des graphiques.

Installation vs chargement

INSTALLATION

L’installation d’un package consiste à télécharger les codes du package sur l’ordi.

Cette étape nécessite que vous téléchargiez l’ensemble des fichiers contenant le code du package sur votre ordi. De ce fait, c’est une étape qui nécessite que vous ayiez accès à internet… Par contre, vous n’avez besoin de réaliser cette installation une seule fois (tant que vous ne changez pas d’ordi, ou que vous n’avez pas besoin de mettre à jour le package par exemple).

Installer un package, c’est un peu comme ramener le carton d’outils de cuisine chez soi et les ranger dans le placard, cf illustration ci-dessous…

L’installation d’un package se fait généralement à l’aide de la commande:

install.packages("dplyr")

Vous pouvez également effectuer cette installation à partir de l’outil “Packages” dans RStudio.

CHARGEMENT

Le chargement consiste à préparer R à l’utilisation des fonctions du package (en les appelant par leur nom).

A chaque fois (ou presque) que vous utiliserez un package (i.e. pour chacune de vos sessions de travail avec ce package), vous aurez besoin de le charger. Le chargement d’un package permet en effet à R d’ajouter les noms de ses fonctions à son “répertoire” et donc d’aller chercher le code correspondant où il se doit.

Charger un package, c’est un peu l’équivalent de sortir les outils du placard de sorte qu’ils soient prêts à servir… cf illustration ci-dessous.

Vous pouvez charger un package de la manière suivante:

library(dplyr)

Espace de nommage, désambiguation

Chaque package est associé à un espace de noms (namespace) qui correspond à l’ensemble des noms de fonctions qui le composent.

Un même nom peut correspondre à plusieurs fonctions, issues de packages différents.

Si ces packages sont installés et chargés pour une même session de travail, il est recommandé (voire indispensable) d’écrire explicitement à quel espace de noms on fait référence à l’aide de la notation nomdupackage::nomdelafonction

library(stats)
library(dplyr)

## 
## Attaching package: 'dplyr'

## The following objects are masked from 'package:stats':
## 
##     filter, lag

## The following objects are masked from 'package:base':
## 
##     intersect, setdiff, setequal, union

starwars %>% filter(starwars,species=="Human")

## Error: Problem with `filter()` input `..1`.
## x Input `..1$name` must be a logical vector, not a character.
## ℹ Input `..1` is `starwars`.

Vie et maintien d’un package

Un package n’est pas définitivement figé au moment de sa création (ou de son dépôt sur le CRAN par exemple).

Il est amené à évoluer, en lien avec, par exemple, les demandes des utilisateurs, les ajouts ou modifications des contributeurs, les modifications rendues nécessaires par les changements de version des autres packages (dont il dépend) ou de R lui-même.

En effet, un package est construit sur la base de codes R préexistants, mais également en se basant sur des packages, basés sur des packages, basés sur des packages… Ces packages constituent ce qu’on appelle les dépendances.

Qualité d’un package

La “qualité” d’un package peut recouvrir de nombreuses notions, parmi lesquelles:

  • le fait que le code fonctionne, et soit robuste (à de légers changements dans les types de données entrées par exemple).
  • le fait que le code soit bien documenté, de sorte que l’utilisateur comprenne comment utiliser une fonction et à quoi correspond le résultat en sortie.
  • le fait que les traitements réalisés soient corrects (par exemple qu’un algorithme soit juste, qu’un test soit correct d’un point de vue statistique etc.) et corresponde bien au résultat escompté par l’utilisateur.

  • Qualité du code => qualité du matériel, de l’instrumentation
  • Qualité de la méthode => on obtient bien le produit escompté
  • Qualité de la doc => les instructions sont claires!

Des fonctions, de la documentation

Pour obtenir de l’aide sur une fonction (installée, peut-être non chargée):

??nomfonction

Pour obtenir de l’aide sur une fonction (installée et chargée):

?nomfonction
help(nomfonction)

Pour obtenir la liste de la doc relative à un package:

help(package="dplyr")

=> liste des fonctions, des vignettes, etc.

Documentation simplifiée: vignettes

Les vignettes sont des documents qui aident à prendre en main un package en identifiant ses fonctions les plus importantes, et en montrant un ou plusieurs cas d’usage.

Tous les packages ne font pas (hélas!) l’objet de vignettes!…

Pour lister les vignettes relatives à un package (par ex. dplyr):

vignette(package="dplyr")

Vignettes in package ‘dplyr’:

colwise                colwise (source, html)
compatibility          dplyr compatibility (source, html)
base                   From base R to dplyr (source, html)
grouping               Grouped data (source, html)
dplyr                  Introduction to dplyr (source, html)
programming            Programming with dplyr (source, html)
rowwise                rowwise (source, html)
two-table              Two-table verbs (source, html)
window-functions       Window functions (source, html)

Pour visualiser une vignette donnée:

vignette("colwise", package="dplyr") # dans RStudio
RShowDoc("colwise", package="dplyr") # dans le navigateur web

Les cheatsheets (ou antisèches) sont des documents visant à résumer de manière graphique la fonction et l’usage d’un package.

Tous les packages ne font pas (hélas, encore!) l’objet d’une cheatsheet. Les plus utiles sont listées ici:

(https://rstudio.com/resources/cheatsheets/)

Des problèmes d’installation?

Ce n’est pas parce que vous avez des messages/ des warnings/ du rouge dans votre console que vous avez eu un problème d’installation…

La preuve:

Le package a bien été installé!

Par contre, là, oui, l’installation n’a pas pu aboutir:

Ici en l’occurrence, j’ai besoin d’installer magick sur ma machine (en dehors de R) avant d’installer le package R magick…

Parmi les problèmes classiques (et faciles à résoudre) qu’on peut rencontrer lors de l’installation, on peut citer:

  • l’absence de connection internet
  • l’absence de guillemets autour du nom de package dans l’appel à la fonction install.packages() (eh oui des fois ça coince pour des bêtises…)
  • une mauvaise orthographe du nom de package

Illustration:

install.packages("dplyr") #j'ai coupé internet

## Installing package into '/home/lvaudor/R/x86_64-pc-linux-gnu-library/3.6'
## (as 'lib' is unspecified)

install.packages(dplyr)

## Error in install.packages(dplyr): objet 'dplyr' introuvable

install.packages("deplyr")

## Installing package into '/home/lvaudor/R/x86_64-pc-linux-gnu-library/3.6'
## (as 'lib' is unspecified)

## Warning: package 'deplyr' is not available (for R version 3.6.3)

Les problèmes d’installation sont relativement souvent liés à un problème dans l’installation des dépendances:

Dans ce cas cela peut être une bonne idée d’installer la dépendance “qui coince” en premier (dans l’exemple ci-dessus xml2), puis retenter l’installation du package…