{"id":1252,"date":"2020-10-07T11:13:19","date_gmt":"2020-10-07T09:13:19","guid":{"rendered":"http:\/\/perso.ens-lyon.fr\/lise.vaudor\/?p=1252"},"modified":"2020-10-07T11:15:27","modified_gmt":"2020-10-07T09:15:27","slug":"utiliser-un-package","status":"publish","type":"post","link":"https:\/\/perso.ens-lyon.fr\/lise.vaudor\/utiliser-un-package\/","title":{"rendered":"Utiliser un package"},"content":{"rendered":"<p><img decoding=\"async\" src=\"..\/..\/lise.vaudor\/Rfigures\/packages_pour_users\/Lise_Vaudor_headband-1.png\" alt=\"\" \/><\/p>\n<h1>Qu\u2019est-ce qu\u2019un package ?<\/h1>\n<p>Un package est un <strong>ensemble de fonctions<\/strong> document\u00e9es visant \u00e0 la <strong>r\u00e9alisation d\u2019une t\u00e2che particuli\u00e8re<\/strong>.<\/p>\n<p><img decoding=\"async\" src=\"..\/..\/lise.vaudor\/Rfigures\/packages_pour_users\/package_opened.png\" alt=\"\" \/><\/p>\n<p>En poursuivant cette s\u00e9rie de tutoriels vous serez notamment amen\u00e9s \u00e0 travailler avec le package <code>dplyr<\/code> qui vise \u00e0 r\u00e9aliser un ensemble d\u2019op\u00e9rations et de manipulations de base sur les tableaux de donn\u00e9es, et le package <code>ggplot2<\/code> qui vise \u00e0 produire des graphiques en s\u2019appuyant sur les principes de la grammaire des graphiques.<\/p>\n<h1>Installation vs chargement<\/h1>\n<p><strong>INSTALLATION<\/strong><\/p>\n<p>L\u2019installation d\u2019un package consiste \u00e0 <strong>t\u00e9l\u00e9charger les codes du package sur l\u2019ordi<\/strong>.<\/p>\n<p>Cette \u00e9tape n\u00e9cessite que vous t\u00e9l\u00e9chargiez l\u2019ensemble des fichiers contenant le code du package sur votre ordi. De ce fait, c\u2019est une \u00e9tape qui n\u00e9cessite que vous ayiez <strong>acc\u00e8s \u00e0 internet<\/strong>\u2026 Par contre, vous n\u2019avez besoin de r\u00e9aliser cette installation <strong>une seule fois<\/strong> (tant que vous ne changez pas d\u2019ordi, ou que vous n\u2019avez pas besoin de mettre \u00e0 jour le package par exemple).<\/p>\n<p>Installer un package, c\u2019est un peu comme ramener le carton d\u2019outils de cuisine chez soi et les ranger dans le placard, cf illustration ci-dessous\u2026<\/p>\n<p><img decoding=\"async\" src=\"..\/..\/lise.vaudor\/Rfigures\/packages_pour_users\/package_cuisine_installe.png\" width=\"300\" \/><\/p>\n<p>L\u2019installation d\u2019un package se fait g\u00e9n\u00e9ralement \u00e0 l\u2019aide de la commande:<\/p>\n<pre><code>install.packages(\"dplyr\")\n<\/code><\/pre>\n<p>Vous pouvez \u00e9galement effectuer cette installation \u00e0 partir de l\u2019outil \u201cPackages\u201d dans RStudio.<\/p>\n<p><strong>CHARGEMENT<\/strong><\/p>\n<p>Le chargement consiste \u00e0 <strong>pr\u00e9parer R \u00e0 l\u2019utilisation des fonctions du package<\/strong> (en les appelant par leur nom).<\/p>\n<p><strong>A chaque fois (ou presque) que vous utiliserez un package<\/strong> (i.e.\u00a0pour chacune de vos sessions de travail avec ce package), vous aurez besoin de le <strong>charger<\/strong>. Le chargement d\u2019un package permet en effet \u00e0 R d\u2019ajouter les noms de ses fonctions \u00e0 son \u201cr\u00e9pertoire\u201d et donc d\u2019aller chercher le code correspondant o\u00f9 il se doit.<\/p>\n<p>Charger un package, c\u2019est un peu l\u2019\u00e9quivalent de sortir les outils du placard de sorte qu\u2019ils soient pr\u00eats \u00e0 servir\u2026 cf illustration ci-dessous.<\/p>\n<p><img decoding=\"async\" src=\"..\/..\/lise.vaudor\/Rfigures\/packages_pour_users\/package_cuisine_charge.png\" width=\"300\" \/><\/p>\n<p>Vous pouvez charger un package de la mani\u00e8re suivante:<\/p>\n<pre><code>library(dplyr)\n<\/code><\/pre>\n<h1>Espace de nommage, d\u00e9sambiguation<\/h1>\n<p>Chaque package est associ\u00e9 \u00e0 un <strong>espace de noms<\/strong> (namespace) qui correspond \u00e0 l\u2019ensemble des noms de fonctions qui le composent.<\/p>\n<p>Un <strong>m\u00eame nom<\/strong> peut correspondre \u00e0 <strong>plusieurs fonctions<\/strong>, issues de <strong>packages diff\u00e9rents<\/strong>.<\/p>\n<p><img decoding=\"async\" src=\"..\/..\/lise.vaudor\/Rfigures\/packages_pour_users\/package_desambiguation.png\" width=\"400\" \/><\/p>\n<p>Si ces packages sont install\u00e9s et charg\u00e9s pour une m\u00eame session de travail, il est recommand\u00e9 (voire indispensable) d\u2019<strong>\u00e9crire explicitement \u00e0 quel espace de noms on fait r\u00e9f\u00e9rence<\/strong> \u00e0 l\u2019aide de la notation <em>nomdupackage::nomdelafonction<\/em>\u2026<\/p>\n<pre><code>library(stats)\nlibrary(dplyr)\n\n## \n## Attaching package: 'dplyr'\n\n## The following objects are masked from 'package:stats':\n## \n##     filter, lag\n\n## The following objects are masked from 'package:base':\n## \n##     intersect, setdiff, setequal, union\n\nstarwars %&gt;% filter(starwars,species==\"Human\")\n\n## Error: Problem with `filter()` input `..1`.\n## x Input `..1$name` must be a logical vector, not a character.\n## \u2139 Input `..1` is `starwars`.\n<\/code><\/pre>\n<h1>Vie et maintien d\u2019un package<\/h1>\n<p>Un package n\u2019est pas d\u00e9finitivement fig\u00e9 au moment de sa cr\u00e9ation (ou de son d\u00e9p\u00f4t sur le CRAN par exemple).<\/p>\n<p>Il est <strong>amen\u00e9 \u00e0 \u00e9voluer<\/strong>, en lien avec, par exemple, les <strong>demandes des utilisateurs<\/strong>, les <strong>ajouts ou modifications des contributeurs<\/strong>, les modifications rendues n\u00e9cessaires par les <strong>changements de version des autres packages<\/strong> (dont il d\u00e9pend) ou de <strong>R lui-m\u00eame<\/strong>.<\/p>\n<p><img decoding=\"async\" src=\"..\/..\/lise.vaudor\/Rfigures\/packages_pour_users\/life_of_a_package_with_legend.png\" alt=\"\" \/><\/p>\n<p>En effet, un package est construit sur la base de codes R pr\u00e9existants, mais \u00e9galement en se basant sur des packages, bas\u00e9s sur des packages, bas\u00e9s sur des packages\u2026 Ces packages constituent ce qu\u2019on appelle les <strong>d\u00e9pendances<\/strong>.<\/p>\n<p><img decoding=\"async\" src=\"..\/..\/lise.vaudor\/Rfigures\/packages_pour_users\/package_dependances.png\" width=\"300\" \/><\/p>\n<h1>Qualit\u00e9 d\u2019un package<\/h1>\n<p>La <strong>\u201cqualit\u00e9\u201d d\u2019un package<\/strong> peut recouvrir de nombreuses notions, parmi lesquelles:<\/p>\n<ul>\n<li>le fait que le <strong>code fonctionne<\/strong>, et soit robuste (\u00e0 de l\u00e9gers changements dans les types de donn\u00e9es entr\u00e9es par exemple).<\/li>\n<li>le fait que le <strong>code soit bien document\u00e9<\/strong>, de sorte que l\u2019utilisateur comprenne comment utiliser une fonction et \u00e0 quoi correspond le r\u00e9sultat en sortie.<\/li>\n<li>le fait que les <strong>traitements r\u00e9alis\u00e9s soient corrects<\/strong> (par exemple qu\u2019un algorithme soit juste, qu\u2019un test soit correct d\u2019un point de vue statistique etc.) et corresponde bien au r\u00e9sultat escompt\u00e9 par l\u2019utilisateur. <!-- Pour un package en cours de d\u00e9veloppement (installable depuis un repo github par exemple) il n'y a **aucune assurance de qualit\u00e9** (autre que la confiance \u00e9ventuelle que vous pouvez accorder \u00e0 son auteur!). --><\/li>\n<\/ul>\n<p><!-- Pour un package **d\u00e9pos\u00e9 sur le CRAN** (Comprehensive R Archive Network), l'**existence d'une documentation** et le **bon fonctionnement du code** sont assur\u00e9s. --><\/p>\n<p><!-- Quant \u00e0 la **qualit\u00e9 et l'exactitude scientifique des codes** d'un package, elles ne sont en g\u00e9n\u00e9ral pas garanties \u00e0 proprement parler, sauf si le package fait l'objet d'une \u00e9valuation (par exemple via la publication d'un article -par exemple dans le *Journal of Statistical Software* ou sa \"labellisation\" par des organismes comme ROpenSci par exemple).  --><\/p>\n<p><img decoding=\"async\" src=\"..\/..\/lise.vaudor\/Rfigures\/packages_pour_users\/package_qualite.png\" width=\"400\" \/><\/p>\n<ul>\n<li>Qualit\u00e9 du code => qualit\u00e9 du mat\u00e9riel, de l\u2019instrumentation<\/li>\n<li>Qualit\u00e9 de la m\u00e9thode => on obtient bien le produit escompt\u00e9<\/li>\n<li>Qualit\u00e9 de la doc => les instructions sont claires!<\/li>\n<\/ul>\n<h1>Des fonctions, de la documentation<\/h1>\n<p>Pour obtenir de l\u2019aide sur une fonction (install\u00e9e, peut-\u00eatre non charg\u00e9e):<\/p>\n<pre><code>??nomfonction\n<\/code><\/pre>\n<p>Pour obtenir de l\u2019aide sur une fonction (install\u00e9e et charg\u00e9e):<\/p>\n<pre><code>?nomfonction\nhelp(nomfonction)\n<\/code><\/pre>\n<p>Pour obtenir la liste de la doc relative \u00e0 un package:<\/p>\n<pre><code>help(package=\"dplyr\")\n<\/code><\/pre>\n<p>=> liste des fonctions, des vignettes, etc.<\/p>\n<h1>Documentation simplifi\u00e9e: vignettes<\/h1>\n<p>Les vignettes sont des documents qui aident \u00e0 <strong>prendre en main un package<\/strong> en identifiant ses <strong>fonctions les plus importantes<\/strong>, et en montrant <strong>un ou plusieurs cas d\u2019usage<\/strong>.<\/p>\n<p>Tous les packages ne font pas (h\u00e9las!) l\u2019objet de vignettes!\u2026<\/p>\n<p>Pour lister les vignettes relatives \u00e0 un package (par ex. dplyr):<\/p>\n<pre><code>vignette(package=\"dplyr\")\n\nVignettes in package \u2018dplyr\u2019:\n\ncolwise                colwise (source, html)\ncompatibility          dplyr compatibility (source, html)\nbase                   From base R to dplyr (source, html)\ngrouping               Grouped data (source, html)\ndplyr                  Introduction to dplyr (source, html)\nprogramming            Programming with dplyr (source, html)\nrowwise                rowwise (source, html)\ntwo-table              Two-table verbs (source, html)\nwindow-functions       Window functions (source, html)\n<\/code><\/pre>\n<p>Pour visualiser une vignette donn\u00e9e:<\/p>\n<pre><code>vignette(\"colwise\", package=\"dplyr\") # dans RStudio\nRShowDoc(\"colwise\", package=\"dplyr\") # dans le navigateur web\n<\/code><\/pre>\n<p>Les <strong>cheatsheets<\/strong> (ou antis\u00e8ches) sont des documents visant \u00e0 <strong>r\u00e9sumer de mani\u00e8re graphique<\/strong> la fonction et l\u2019usage d\u2019un package.<\/p>\n<p>Tous les packages ne font pas (h\u00e9las, encore!) l\u2019objet d\u2019une cheatsheet. Les plus utiles sont list\u00e9es ici:<\/p>\n<p>(<a href=\"https:\/\/rstudio.com\/resources\/cheatsheets\/\" class=\"uri\">https:\/\/rstudio.com\/resources\/cheatsheets\/<\/a>)<\/p>\n<p><img decoding=\"async\" src=\"..\/..\/lise.vaudor\/Rfigures\/packages_pour_users\/exemple_cheatsheet.png\" alt=\"\" \/><\/p>\n<h1>Des probl\u00e8mes d\u2019installation?<\/h1>\n<p>Ce n\u2019est pas parce que vous avez des <strong>messages\/ des warnings\/ du rouge<\/strong> dans votre console que vous avez eu un probl\u00e8me d\u2019installation\u2026<\/p>\n<p>La preuve:<\/p>\n<p><img decoding=\"async\" src=\"..\/..\/lise.vaudor\/Rfigures\/packages_pour_users\/install_changepoint.png\" alt=\"\" \/><\/p>\n<p>Le package a bien \u00e9t\u00e9 install\u00e9!<\/p>\n<p>Par contre, l\u00e0, oui, l\u2019installation <strong>n\u2019a pas pu aboutir<\/strong>:<\/p>\n<p><img decoding=\"async\" src=\"..\/..\/lise.vaudor\/Rfigures\/packages_pour_users\/install_magick.png\" alt=\"\" \/><\/p>\n<p>Ici en l\u2019occurrence, j\u2019ai besoin d\u2019installer magick sur ma machine (en dehors de R) avant d\u2019installer le package R magick\u2026<\/p>\n<p>Parmi les <strong>probl\u00e8mes classiques<\/strong> (et faciles \u00e0 r\u00e9soudre) qu\u2019on peut rencontrer lors de l\u2019installation, on peut citer:<\/p>\n<ul>\n<li>l\u2019<strong>absence de connection internet<\/strong><\/li>\n<li>l\u2019<strong>absence de guillemets<\/strong> autour du nom de package dans l\u2019appel \u00e0 la fonction install.packages() (eh oui des fois \u00e7a coince pour des b\u00eatises\u2026)<\/li>\n<li>une <strong>mauvaise orthographe<\/strong> du nom de package<\/li>\n<\/ul>\n<p>Illustration:<\/p>\n<pre><code>install.packages(\"dplyr\") #j'ai coup\u00e9 internet\n\n## Installing package into '\/home\/lvaudor\/R\/x86_64-pc-linux-gnu-library\/3.6'\n## (as 'lib' is unspecified)\n\ninstall.packages(dplyr)\n\n## Error in install.packages(dplyr): objet 'dplyr' introuvable\n\ninstall.packages(\"deplyr\")\n\n## Installing package into '\/home\/lvaudor\/R\/x86_64-pc-linux-gnu-library\/3.6'\n## (as 'lib' is unspecified)\n\n## Warning: package 'deplyr' is not available (for R version 3.6.3)\n<\/code><\/pre>\n<p>Les probl\u00e8mes d\u2019installation sont relativement souvent li\u00e9s \u00e0 un probl\u00e8me dans l\u2019installation des d\u00e9pendances:<\/p>\n<p><img decoding=\"async\" src=\"..\/..\/lise.vaudor\/Rfigures\/packages_pour_users\/install_golem_pb.png\" alt=\"\" \/><\/p>\n<p>Dans ce cas cela peut \u00eatre une bonne id\u00e9e d\u2019<strong>installer la d\u00e9pendance \u201cqui coince\u201d en premier<\/strong> (dans l\u2019exemple ci-dessus xml2), puis retenter l\u2019installation du package\u2026<\/p>\n<p><img decoding=\"async\" src=\"..\/..\/lise.vaudor\/Rfigures\/packages_pour_users\/package_dependances_install_pb.png\" width=\"300\" \/><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Qu\u2019est-ce qu\u2019un package ? Un package est un ensemble de fonctions document\u00e9es visant \u00e0 la r\u00e9alisation d\u2019une t\u00e2che particuli\u00e8re. En poursuivant cette s\u00e9rie de tutoriels vous serez notamment amen\u00e9s \u00e0 travailler avec le package dplyr qui vise \u00e0 r\u00e9aliser un ensemble d\u2019op\u00e9rations et de manipulations de base sur les tableaux de donn\u00e9es, et le package ggplot2 qui vise \u00e0 produire des graphiques en s\u2019appuyant sur les principes de la grammaire.. <a href=\"https:\/\/perso.ens-lyon.fr\/lise.vaudor\/utiliser-un-package\/\">Read More<\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[5],"tags":[],"class_list":["post-1252","post","type-post","status-publish","format-standard","hentry","category-tous-les-posts"],"_links":{"self":[{"href":"https:\/\/perso.ens-lyon.fr\/lise.vaudor\/wp-json\/wp\/v2\/posts\/1252","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/perso.ens-lyon.fr\/lise.vaudor\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/perso.ens-lyon.fr\/lise.vaudor\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/perso.ens-lyon.fr\/lise.vaudor\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/perso.ens-lyon.fr\/lise.vaudor\/wp-json\/wp\/v2\/comments?post=1252"}],"version-history":[{"count":9,"href":"https:\/\/perso.ens-lyon.fr\/lise.vaudor\/wp-json\/wp\/v2\/posts\/1252\/revisions"}],"predecessor-version":[{"id":1262,"href":"https:\/\/perso.ens-lyon.fr\/lise.vaudor\/wp-json\/wp\/v2\/posts\/1252\/revisions\/1262"}],"wp:attachment":[{"href":"https:\/\/perso.ens-lyon.fr\/lise.vaudor\/wp-json\/wp\/v2\/media?parent=1252"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/perso.ens-lyon.fr\/lise.vaudor\/wp-json\/wp\/v2\/categories?post=1252"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/perso.ens-lyon.fr\/lise.vaudor\/wp-json\/wp\/v2\/tags?post=1252"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}