{"id":15119,"date":"2020-03-06T21:57:23","date_gmt":"2020-03-06T20:57:23","guid":{"rendered":"https:\/\/www.datanovia.com\/en\/?p=15119"},"modified":"2020-03-06T21:57:23","modified_gmt":"2020-03-06T20:57:23","slug":"style-de-programmation-r-meilleures-pratiques","status":"publish","type":"post","link":"https:\/\/www.datanovia.com\/en\/fr\/blog\/style-de-programmation-r-meilleures-pratiques\/","title":{"rendered":"Style de Programmation R: Meilleures Pratiques"},"content":{"rendered":"<div id=\"rdoc\">\n<p>Cet article d\u00e9crit les \u00e9l\u00e9ments essentiels des meilleures pratiques du <strong>style de codage R<\/strong>. Il est bas\u00e9 sur le [style tidyverse] (<a class=\"uri\" href=\"https:\/\/style.tidyverse.org\/\">https:\/\/style.tidyverse.org\/<\/a>). Le <a href=\"https:\/\/google.github.io\/styleguide\/Rguide.html\">guide actuel de Gougle<\/a> est \u00e9galement d\u00e9riv\u00e9 du guide de style tidyverse.<\/p>\n<p>Deux packages R importants sont disponibles pour vous aider \u00e0 appliquer les meilleures pratiques du style de codage R:<\/p>\n<ul>\n<li>** <a href=\"http:\/\/styler.r-lib.org\">styler<\/a> vous permet de restyler de mani\u00e8re interactive textes s\u00e9lectionn\u00e9s, fichiers ou projets**. Il comprend un add-in RStudio, la mani\u00e8re la plus simple de r\u00e9organiser le code existant.<\/li>\n<\/ul>\n<p><img decoding=\"async\" src=\"https:\/\/www.datanovia.com\/en\/wp-content\/uploads\/dn-tutorials\/r-tutorial\/images\/r-coding-style-automatic-styler-package.gif\" alt=\"package styler\" \/><\/p>\n<p>Le but de <code>styler<\/code> est de fournir une impression non invasive du code source de R tout en respectant les r\u00e8gles de formatage tidyverse. Il peut \u00eatre install\u00e9 en utilisant le code R suivant: <code>install.packages(\"styler\")<\/code>. Les principales fonctions sont les suivantes:<\/p>\n<ul>\n<li><code>style_file()<\/code>: styles .R, .Rmd .Rnw et .Rprofile, fichiers.<\/li>\n<li><code>style_dir()<\/code>: stylise tous les fichiers .R et\/ou .Rmd dans un r\u00e9pertoire.<\/li>\n<li><code>style_pkg()<\/code>: les styles des fichiers sources d\u2019un paquet R.<\/li>\n<\/ul>\n<p>La fonctionnalit\u00e9 \u201cstyler\u201d est disponible par le biais d\u2019autres outils, notamment : <code>usethis::use_tidy_style()<\/code> fa\u00e7onne votre projet selon le guide de style tidyverse.<\/p>\n<ul>\n<li>** <a href=\"https:\/\/github.com\/jimhester\/lintr\">lintr<\/a> effectue des contr\u00f4les automatis\u00e9s pour confirmer que vous vous conformez au guide de style**. Il peut \u00eatre install\u00e9 en utilisant le code R suivant: <code>install.packages(\"lintr\")<\/code>.<\/li>\n<\/ul>\n<p><img decoding=\"async\" src=\"https:\/\/www.datanovia.com\/en\/wp-content\/uploads\/dn-tutorials\/r-tutorial\/images\/r-coding-style-lintr-package.gif\" alt=\"package lintr\" \/><\/p>\n<p>Les r\u00e9sultats de <code>lintr<\/code> s\u2019affichent automatiquement dans le panneau Markers de RStudio (versions Rstudio &gt; v0.99.206). Afin de montrer le volet \" Markers \" dans RStudio : Menu \u201cOutils\u201d -&gt; \u201cOptions globales\u2026\u201d, une fen\u00eatre avec le titre \u201cOptions\u201d appara\u00eetra. Dans cette fen\u00eatre : Cliquez sur \u201cCode\u201d \u00e0 gauche ; cliquez sur l\u2019onglet \u201cDiagnostics\u201d ; cochez \u201cAfficher les diagnostics pour R\u201d.<\/p>\n<p>Pour lier un fichier source <code>test.R<\/code>, tapez dans la console <code>lintr::lint(\"test.R\")<\/code> et regardez le r\u00e9sultat dans le panneau \" Markers \".<\/p>\n<p>Ce package comprend \u00e9galement deux addins pour lier la source et le package actuels. Pour lier l\u2019addin \u00e0 un raccourci clavier, acc\u00e9dez \u00e0 Outils &gt; addins &gt; Parcourir les addins &gt; Raccourcis clavier. Il est recommand\u00e9 d\u2019utiliser Alt+Shift+L pour le code source actuel et Ctrl+Shift+Alt+L pour le code du package. Il est facile de les m\u00e9moriser puisque vous \u00eates Alt+Shift+L(int) \ud83d\ude09<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/www.datanovia.com\/en\/wp-content\/uploads\/dn-tutorials\/r-tutorial\/images\/r-coding-style-lintr-lints.png\" alt=\"Rstudio lintr lints\" \/><\/p>\n<p>Dans ce tutoriel, vous apprendrez les meilleures pratiques pour:<\/p>\n<ul>\n<li>Noms de fichiers et structures du contenu<\/li>\n<li>Variables et conventions de d\u00e9nomination des objets<\/li>\n<li>Syntaxee R et meilleures pratiques en mati\u00e8re de pipes<\/li>\n<\/ul>\n<p>Sommaire:<\/p>\n<div id=\"TOC\">\n<ul>\n<li><a href=\"#fichiers\">Fichiers<\/a>\n<ul>\n<li><a href=\"#conventions-de-d\u00e9nomination-des-fichiers\">Conventions de d\u00e9nomination des fichiers<\/a><\/li>\n<li><a href=\"#structure-du-contenu-des-fichiers\">Structure du contenu des fichiers<\/a><\/li>\n<\/ul>\n<\/li>\n<li><a href=\"#syntaxe\">Syntaxe<\/a>\n<ul>\n<li><a href=\"#convention-de-d\u00e9nomination-des-objets\">Convention de d\u00e9nomination des objets<\/a><\/li>\n<li><a href=\"#espacement\">Espacement<\/a><\/li>\n<li><a href=\"#noms-des-arguments\">Noms des arguments<\/a><\/li>\n<li><a href=\"#indenting\">Blocs de code<\/a><\/li>\n<li><a href=\"#longues-lignes\">Longues lignes<\/a><\/li>\n<li><a href=\"#affectation\">Affectation<\/a><\/li>\n<li><a href=\"#points-virgules\">Points-virgules<\/a><\/li>\n<li><a href=\"#citations\">Citations<\/a><\/li>\n<li><a href=\"#commentaires\">Commentaires<\/a><\/li>\n<\/ul>\n<\/li>\n<li><a href=\"#fonctions\">Fonctions<\/a>\n<ul>\n<li><a href=\"#convention-dappellation-des-fonctions\">Convention d\u2019appellation des fonctions<\/a><\/li>\n<li><a href=\"#d\u00e9finition-de-fonction-long-avec-plein-darguments\">D\u00e9finition de fonction long avec plein d\u2019arguments<\/a><\/li>\n<li><a href=\"#fonction-return\">Fonction <code>return()<\/code><\/a><\/li>\n<\/ul>\n<\/li>\n<li><a href=\"#pipes\">Pipes<\/a>\n<ul>\n<li><a href=\"#introduction\">Introduction<\/a><\/li>\n<li><a href=\"#espace\">Espace<\/a><\/li>\n<li><a href=\"#longues-lignes-1\">Longues lignes<\/a><\/li>\n<li><a href=\"#pipes-courts\">Pipes courts<\/a><\/li>\n<\/ul>\n<\/li>\n<li><a href=\"#r\u00e9f\u00e9rences\">R\u00e9f\u00e9rences<\/a><\/li>\n<\/ul>\n<\/div>\n<div id=\"fichiers\" class=\"section level2\">\n<h2>Fichiers<\/h2>\n<div id=\"conventions-de-d\u00e9nomination-des-fichiers\" class=\"section level3\">\n<h3>Conventions de d\u00e9nomination des fichiers<\/h3>\n<p>Les noms de fichiers doivent \u00eatre significatifs et se terminer par <code>.R<\/code>. \u00c9vitez d\u2019utiliser des caract\u00e8res sp\u00e9ciaux dans les noms de fichiers - s\u2019en tenir aux chiffres, aux lettres, <code>-<\/code>, and <code>_<\/code>.<\/p>\n<pre class=\"bash\"><code># Bon\r\nfit_models.R\r\nutility_functions.R\r\n\r\n# Mauvais\r\nfit models.R\r\nfoo.r\r\nstuff.r<\/code><\/pre>\n<p>Si les fichiers doivent \u00eatre ex\u00e9cut\u00e9s dans un ordre particulier, les pr\u00e9fixer avec des num\u00e9ros. S\u2019il semble probable que vous ayez plus de 10 fichiers, mettez z\u00e9ro devant le num\u00e9ro:<\/p>\n<pre class=\"bash\"><code>00_download.R\r\n01_explore.R\r\n...\r\n09_model.R\r\n10_visualize.R<\/code><\/pre>\n<p>Si vous vous rendez compte par la suite que vous avez manqu\u00e9 certaines \u00e9tapes, il est tentant d\u2019utiliser \u201c02a\u201d, \u201c02b\u201d, etc. Cependant, il est g\u00e9n\u00e9ralement pr\u00e9f\u00e9rable de renommer tous les fichiers.<\/p>\n<\/div>\n<div id=\"structure-du-contenu-des-fichiers\" class=\"section level3\">\n<h3>Structure du contenu des fichiers<\/h3>\n<ul>\n<li>Chargez tous les paquets requis au tout d\u00e9but du fichier<\/li>\n<li>Use commented lines of <code>-<\/code> and <code>=<\/code> to break up your file into easily readable chunks.<\/li>\n<\/ul>\n<pre class=\"r\"><code># Charger des donn\u00e9es --------------------------\r\n\r\n# Cr\u00e9er un graphique --------------------------<\/code><\/pre>\n<\/div>\n<\/div>\n<div id=\"syntaxe\" class=\"section level2\">\n<h2>Syntaxe<\/h2>\n<div id=\"convention-de-d\u00e9nomination-des-objets\" class=\"section level3\">\n<h3>Convention de d\u00e9nomination des objets<\/h3>\n<ul>\n<li>Utilisez uniquement des lettres minuscules et des chiffres.<\/li>\n<li>Utilisez des traits underscores (<code>_<\/code>) (dit \u201csnake case\u201d) pour s\u00e9parer les mots dans un nom.<\/li>\n<li>Utilisez des noms concis et significatifs (ce n\u2019est pas facile !).<\/li>\n<li>En g\u00e9n\u00e9ral, les noms de variables doivent \u00eatre des noms et les noms de fonctions des verbes.<\/li>\n<li>Dans la mesure du possible, \u00e9vitez de r\u00e9utiliser les noms des fonctions et des variables communes. Cela cr\u00e9era une confusion pour les lecteurs de votre code.<\/li>\n<li>Si vous essayez de comprimer des donn\u00e9es dans des noms de variables (par exemple. <code>model_2018<\/code>, <code>model_2019<\/code>, <code>model_2020<\/code>), envisagez plut\u00f4t d\u2019utiliser une liste ou un data frame.<\/li>\n<\/ul>\n<pre class=\"r\"><code># Exemples de noms de variables ------------\r\n# Bon\r\nday_one\r\nday_1\r\n\r\n# Mauvais\r\nDayOne\r\ndayone<\/code><\/pre>\n<\/div>\n<div id=\"espacement\" class=\"section level3\">\n<h3>Espacement<\/h3>\n<div id=\"commas\" class=\"section level4\">\n<h4>Commas<\/h4>\n<p>Mettez toujours un espace apr\u00e8s une virgule, jamais avant, comme en anglais normal.<\/p>\n<pre class=\"r\"><code># Bon\r\nx[, 1]\r\n\r\n# Mauvais\r\nx[,1]\r\nx[ ,1]\r\nx[ , 1]<\/code><\/pre>\n<\/div>\n<div id=\"parenth\u00e8ses\" class=\"section level4\">\n<h4>Parenth\u00e8ses<\/h4>\n<p>Ne mettez pas d\u2019espaces entre parenth\u00e8ses pour les appels de fonction r\u00e9guliers.<\/p>\n<pre class=\"r\"><code># Bon\r\nmean(x, na.rm = TRUE)\r\n\r\n# Mauvais\r\nmean (x, na.rm = TRUE)\r\nmean( x, na.rm = TRUE )<\/code><\/pre>\n<p>Placez un espace avant et apr\u00e8s <code>()<\/code> lorsqu\u2019il est utilis\u00e9 avec <code>if<\/code>, <code>for<\/code>, ou <code>while<\/code>.<\/p>\n<pre class=\"r\"><code># Bon\r\nif (debug) {\r\n  show(x)\r\n}\r\n\r\n# Mauvais\r\nif(debug){\r\n  show(x)\r\n}<\/code><\/pre>\n<p>Placez un espace apr\u00e8s <code>()<\/code> utilis\u00e9 pour les arguments de fonction:<\/p>\n<pre class=\"r\"><code># Bon\r\nfunction(x) {}\r\n\r\n# Mauvais\r\nfunction (x) {}\r\nfunction(x){}<\/code><\/pre>\n<\/div>\n<div id=\"op\u00e9rateurs-infix\" class=\"section level4\">\n<h4>Op\u00e9rateurs Infix<\/h4>\n<p>Most infix operators (<code>==<\/code>, <code>+<\/code>, <code>-<\/code>, <code>&lt;-<\/code>, etc.) should always be surrounded by spaces:<\/p>\n<pre class=\"r\"><code># Bon\r\nheight &lt;- (feet * 12) + inches\r\nmean(x, na.rm = 10)\r\n\r\n# Mauvais\r\nheight&lt;-feet*12+inches\r\nmean(x, na.rm=10)<\/code><\/pre>\n<p>There are a few exceptions, to this rule: <code>::<\/code>, <code>:::<\/code>, <code>$<\/code>, <code>@<\/code>, <code>[<\/code>, <code>[[<\/code>, <code>^<\/code>, unary <code>-<\/code>, unary <code>+<\/code>, and <code>:<\/code>.<\/p>\n<pre class=\"r\"><code># Bon\r\nsqrt(x^2 + y^2)\r\ndf$z\r\nx &lt;- 1:10\r\n\r\n# Mauvais\r\nsqrt(x ^ 2 + y ^ 2)\r\ndf $ z\r\nx &lt;- 1 : 10<\/code><\/pre>\n<\/div>\n<div id=\"espaces-suppl\u00e9mentaires\" class=\"section level4\">\n<h4>Espaces suppl\u00e9mentaires<\/h4>\n<p>L\u2019ajout d\u2019espaces suppl\u00e9mentaires est acceptable si cela am\u00e9liore l\u2019alignement de <code>=<\/code> ou <code>&lt;-<\/code>.<\/p>\n<pre class=\"r\"><code># Bon\r\nlist(\r\n  total = a + b + c,\r\n  mean  = (a + b + c) \/ n\r\n)\r\n\r\n# Aussi bien\r\nlist(\r\n  total = a + b + c,\r\n  mean = (a + b + c) \/ n\r\n)<\/code><\/pre>\n<p>N\u2019ajoutez pas d\u2019espaces suppl\u00e9mentaires aux endroits o\u00f9 l\u2019espace n\u2019est g\u00e9n\u00e9ralement pas autoris\u00e9.<\/p>\n<\/div>\n<\/div>\n<div id=\"noms-des-arguments\" class=\"section level3\">\n<h3>Noms des arguments<\/h3>\n<p>Les arguments d\u2019une fonction se divisent g\u00e9n\u00e9ralement en deux grandes cat\u00e9gories : l\u2019une fournit les <strong>donn\u00e9es<\/strong> sur lesquelles calculer ; l\u2019autre contr\u00f4le les <strong>d\u00e9tails<\/strong> du calcul. Lorsque vous appelez une fonction, vous omettez g\u00e9n\u00e9ralement les noms des arguments de donn\u00e9es, car ils sont utilis\u00e9s si souvent. Si vous passez outre la valeur par d\u00e9faut d\u2019un argument, utilisez le nom complet:<\/p>\n<pre class=\"r\"><code># Bon\r\nmean(1:10, na.rm = TRUE)\r\n\r\n# Mauvais\r\nmean(x = 1:10, , FALSE)\r\nmean(, TRUE, x = c(1:10, NA))<\/code><\/pre>\n<p>\u00c9viter les correspondances partielles ou partial matching.<\/p>\n<\/div>\n<div id=\"indenting\" class=\"section level3\">\n<h3>Blocs de code<\/h3>\n<p>Les accolades, <code>{}<\/code>, d\u00e9finissent la plus importante hi\u00e9rarchie du code R. Pour que cette hi\u00e9rarchie soit facile \u00e0 voir:<\/p>\n<ul>\n<li><code>{<\/code> doit \u00eatre le dernier caract\u00e8re de la ligne. Le code associ\u00e9 (par exemple, une clause <code>if<\/code>, une d\u00e9claration de fonction, une virgule de fin, \u2026) doit \u00eatre sur la m\u00eame ligne que l\u2019accolade d\u2019ouverture.<\/li>\n<li>Le contenu doit \u00eatre mis en retrait de deux espaces.<\/li>\n<li><code>}<\/code> doit \u00eatre le premier caract\u00e8re de la ligne.<\/li>\n<\/ul>\n<pre class=\"r\"><code># Bon\r\nif (y &lt; 0 &amp;&amp; debug) {\r\n  message(\"y is negative\")\r\n}\r\n\r\nif (y == 0) {\r\n  if (x &gt; 0) {\r\n    log(x)\r\n  } else {\r\n    message(\"x is negative or zero\")\r\n  }\r\n} else {\r\n  y^x\r\n}\r\n\r\n\r\n# Mauvais\r\nif (y &lt; 0 &amp;&amp; debug) {\r\nmessage(\"Y is negative\")\r\n}\r\n\r\nif (y == 0)\r\n{\r\n    if (x &gt; 0) {\r\n      log(x)\r\n    } else {\r\n  message(\"x is negative or zero\")\r\n    }\r\n} else { y ^ x }<\/code><\/pre>\n<\/div>\n<div id=\"longues-lignes\" class=\"section level3\">\n<h3>Longues lignes<\/h3>\n<ul>\n<li>Essayez de limiter votre code \u00e0 80 caract\u00e8res par ligne.<\/li>\n<li>Si un appel de fonction est trop long pour tenir sur une seule ligne, utilisez une ligne pour chaque le nom de la fonction, chaque argument et la cl\u00f4ture <code>)<\/code>. Cela rend le code plus facile \u00e0 lire et \u00e0 modifier ult\u00e9rieurement.<\/li>\n<li>Vous pouvez placer plusieurs arguments sur la m\u00eame ligne s\u2019ils sont proches li\u00e9es les unes aux autres<\/li>\n<\/ul>\n<pre class=\"r\"><code># Bon\r\ndo_something_very_complicated(\r\n  something = \"that\",\r\n  requires = many,\r\n  arguments = \"some of which may be long\"\r\n)\r\n\r\n# Mauvais\r\ndo_something_very_complicated(\"that\", requires, many, arguments,\r\n                              \"some of which may be long\"\r\n                              )<\/code><\/pre>\n<\/div>\n<div id=\"affectation\" class=\"section level3\">\n<h3>Affectation<\/h3>\n<p>Use <code>&lt;-<\/code>, not <code>=<\/code>, for assignment.<\/p>\n<pre class=\"r\"><code># Bon\r\nx &lt;- 5\r\n\r\n# Mauvais\r\nx = 5<\/code><\/pre>\n<\/div>\n<div id=\"points-virgules\" class=\"section level3\">\n<h3>Points-virgules<\/h3>\n<p>Ne mettez pas <code>;<\/code> \u00e0 la fin d\u2019une ligne, et n\u2019utilisez pas <code>;<\/code> pour mettre plusieurs commandes sur une ligne.<\/p>\n<\/div>\n<div id=\"citations\" class=\"section level3\">\n<h3>Citations<\/h3>\n<p>Utilisez <code>\"<\/code>, et non \u201c`\u201d, pour citer le texte. La seule exception est lorsque le texte contient d\u00e9j\u00e0 des guillemets doubles et pas de guillemets simples.<\/p>\n<pre class=\"r\"><code># Bon\r\n\"Text\"\r\n'Text with \"quotes\"'\r\n'&lt;a href=\"http:\/\/style.tidyverse.org\"&gt;A link&lt;\/a&gt;'\r\n\r\n# Mauvais\r\n'Text'\r\n'Text with \"double\" and \\'single\\' quotes'<\/code><\/pre>\n<\/div>\n<div id=\"commentaires\" class=\"section level3\">\n<h3>Commentaires<\/h3>\n<p>Si vous avez besoin de commentaires pour expliquer ce que fait votre code, envisagez de le r\u00e9\u00e9crire pour qu\u2019il soit plus clair. Si vous d\u00e9couvrez que vous avez plus de commentaires que de codes, envisagez de passer \u00e0 R Markdown.<\/p>\n<\/div>\n<\/div>\n<div id=\"fonctions\" class=\"section level2\">\n<h2>Fonctions<\/h2>\n<div id=\"convention-dappellation-des-fonctions\" class=\"section level3\">\n<h3>Convention d\u2019appellation des fonctions<\/h3>\n<p>Utiliser des verbes pour les noms de fonctions:<\/p>\n<pre class=\"r\"><code># Bon\r\nadd_row()\r\npermute()\r\n\r\n# Mauvais\r\nrow_adder()\r\npermutation()<\/code><\/pre>\n<\/div>\n<div id=\"d\u00e9finition-de-fonction-long-avec-plein-darguments\" class=\"section level3\">\n<h3>D\u00e9finition de fonction long avec plein d\u2019arguments<\/h3>\n<p>Si la d\u00e9finition d\u2019une fonction s\u2019\u00e9tend sur plusieurs lignes, indentez la deuxi\u00e8me ligne jusqu\u2019au point de d\u00e9part de la d\u00e9finition.<\/p>\n<pre class=\"r\"><code># Bon\r\nlong_function_name &lt;- function(a = \"a long argument\",\r\n                               b = \"another argument\",\r\n                               c = \"another long argument\") {\r\n  # Comme d'habitude, le code est indent\u00e9 par deux espaces.\r\n}\r\n\r\n# Mauvais\r\nlong_function_name &lt;- function(a = \"a long argument\",\r\n  b = \"another argument\",\r\n  c = \"another long argument\") {\r\n  # Il est difficile de savoir o\u00f9 s'arr\u00eate la d\u00e9finition et le\r\n  # code commence\r\n}<\/code><\/pre>\n<\/div>\n<div id=\"fonction-return\" class=\"section level3\">\n<h3>Fonction <code>return()<\/code><\/h3>\n<ul>\n<li>N\u2019utilisez <code>return()<\/code> que pour les retours anticip\u00e9s. Sinon, utilisez R pour renvoyer le r\u00e9sultat de la derni\u00e8re expression \u00e9valu\u00e9e.<\/li>\n<li>Les d\u00e9clarations de \u201creturn()\u201d doivent toujours \u00eatre sur leur propre ligne.<\/li>\n<\/ul>\n<pre class=\"r\"><code># Bon\r\nfind_abs &lt;- function(x) {\r\n  if (x &gt; 0) {\r\n    return(x)\r\n  }\r\n  x * -1\r\n}\r\nadd_two &lt;- function(x, y) {\r\n  x + y\r\n}\r\n\r\n# Mauvais\r\nadd_two &lt;- function(x, y) {\r\n  return(x + y)\r\n}<\/code><\/pre>\n<p>Si votre fonction est appel\u00e9e principalement pour ses effets secondaires (comme l\u2019impression, le trac\u00e9 ou la sauvegarde sur disque), elle doit renvoyer le premier argument de mani\u00e8re invisible. Cela permet d\u2019utiliser la fonction comme une partie d\u2019un pipe. Les m\u00e9thodes <code>print<\/code>devraient g\u00e9n\u00e9ralement le faire, comme cet exemple tir\u00e9 de <a href=\"http:\/\/httr.r-lib.org\/\">httr<\/a>:<\/p>\n<pre class=\"r\"><code>print.url &lt;- function(x, ...) {\r\n  cat(\"Url: \", build_url(x), \"\\n\", sep = \"\")\r\n  invisible(x)\r\n}<\/code><\/pre>\n<\/div>\n<\/div>\n<div id=\"pipes\" class=\"section level2\">\n<h2>Pipes<\/h2>\n<div id=\"introduction\" class=\"section level3\">\n<h3>Introduction<\/h3>\n<p>Utilisez <code>%&gt;%<\/code> pour mettre l\u2019accent sur une s\u00e9quence d\u2019actions.<\/p>\n<p>\u00c9vitez d\u2019utiliser le pipe lorsque:<\/p>\n<ul>\n<li>Vous devez manipuler plus d\u2019un objet \u00e0 la fois. R\u00e9server les pipes pour une s\u00e9quence d\u2019\u00e9tapes appliqu\u00e9e \u00e0 un objet primaire.<\/li>\n<li>Il existe des objets interm\u00e9diaires significatifs auxquels on pourrait donner des noms informatifs.<\/li>\n<\/ul>\n<\/div>\n<div id=\"espace\" class=\"section level3\">\n<h3>Espace<\/h3>\n<p>Le caract\u00e8re <code>%&gt;%<\/code> doit toujours \u00eatre pr\u00e9c\u00e9d\u00e9 d\u2019un espace et doit g\u00e9n\u00e9ralement \u00eatre suivi d\u2019une nouvelle ligne. Apr\u00e8s la premi\u00e8re \u00e9tape, chaque ligne doit \u00eatre indent\u00e9e de deux espaces.<\/p>\n<pre class=\"r\"><code># Bon\r\niris %&gt;%\r\n  group_by(Species) %&gt;%\r\n  summarize_if(is.numeric, mean) %&gt;%\r\n  ungroup() %&gt;%\r\n  gather(measure, value, -Species) %&gt;%\r\n  arrange(value)\r\n\r\n# Mauvais\r\niris %&gt;% group_by(Species) %&gt;% summarize_all(mean) %&gt;%\r\nungroup %&gt;% gather(measure, value, -Species) %&gt;%\r\narrange(value)<\/code><\/pre>\n<\/div>\n<div id=\"longues-lignes-1\" class=\"section level3\">\n<h3>Longues lignes<\/h3>\n<p>Si les arguments en faveur d\u2019une fonction ne tiennent pas tous sur une seule ligne, placez chaque argument sur sa propre ligne et mettez un retrait:<\/p>\n<pre class=\"r\"><code>iris %&gt;%\r\n  group_by(Species) %&gt;%\r\n  summarise(\r\n    Sepal.Length = mean(Sepal.Length),\r\n    Sepal.Width = mean(Sepal.Width),\r\n    Species = n_distinct(Species)\r\n  )<\/code><\/pre>\n<\/div>\n<div id=\"pipes-courts\" class=\"section level3\">\n<h3>Pipes courts<\/h3>\n<p>Un pipe en une seule \u00e9tape peut rester sur une ligne, mais \u00e0 moins que vous ne pr\u00e9voyiez de l\u2019\u00e9tendre plus tard, vous devriez envisager de le r\u00e9\u00e9crire en un appel de fonction r\u00e9gulier.<\/p>\n<pre class=\"r\"><code># Bon\r\niris %&gt;% arrange(Species)\r\n\r\niris %&gt;% \r\n  arrange(Species)\r\n\r\narrange(iris, Species)<\/code><\/pre>\n<\/div>\n<\/div>\n<div id=\"r\u00e9f\u00e9rences\" class=\"section level2\">\n<h2>R\u00e9f\u00e9rences<\/h2>\n<ul>\n<li>[Le guide du style tidyverse] (<a class=\"uri\" href=\"https:\/\/style.tidyverse.org\/\">https:\/\/style.tidyverse.org\/<\/a>)<\/li>\n<li><a href=\"https:\/\/styler.r-lib.org\/\">Formatage automatique du code R \u00e0 l\u2019aide du package styler<\/a><\/li>\n<li><a href=\"https:\/\/github.com\/jimhester\/lintr\">Analyse du code statique pour R en utilisant lintr<\/a><\/li>\n<\/ul>\n<\/div>\n<\/div>\n<p><!--end rdoc--><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Cet article d\u00e9crit les \u00e9l\u00e9ments essentiels des meilleures pratiques du style de codage R. Il est bas\u00e9 sur le [style tidyverse] (https:\/\/style.tidyverse.org\/). Le guide actuel de Gougle est \u00e9galement d\u00e9riv\u00e9 [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":15120,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"rating_form_position":"","rating_results_position":"","mr_structured_data_type":"","footnotes":""},"categories":[277],"tags":[],"class_list":["post-15119","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-programmation-r"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v25.2 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Style de Programmation R: Meilleures Pratiques - Datanovia<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.datanovia.com\/en\/fr\/blog\/style-de-programmation-r-meilleures-pratiques\/\" \/>\n<meta property=\"og:locale\" content=\"fr_FR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Style de Programmation R: Meilleures Pratiques - Datanovia\" \/>\n<meta property=\"og:description\" content=\"Cet article d\u00e9crit les \u00e9l\u00e9ments essentiels des meilleures pratiques du style de codage R. Il est bas\u00e9 sur le [style tidyverse] (https:\/\/style.tidyverse.org\/). Le guide actuel de Gougle est \u00e9galement d\u00e9riv\u00e9 [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.datanovia.com\/en\/fr\/blog\/style-de-programmation-r-meilleures-pratiques\/\" \/>\n<meta property=\"og:site_name\" content=\"Datanovia\" \/>\n<meta property=\"article:published_time\" content=\"2020-03-06T20:57:23+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.datanovia.com\/en\/wp-content\/uploads\/2019\/05\/X50589436_796126424060637_4634267315792248832_n.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"1024\" \/>\n\t<meta property=\"og:image:height\" content=\"512\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"Alboukadel\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"\u00c9crit par\" \/>\n\t<meta name=\"twitter:data1\" content=\"Alboukadel\" \/>\n\t<meta name=\"twitter:label2\" content=\"Dur\u00e9e de lecture estim\u00e9e\" \/>\n\t<meta name=\"twitter:data2\" content=\"10 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/www.datanovia.com\/en\/fr\/blog\/style-de-programmation-r-meilleures-pratiques\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.datanovia.com\/en\/fr\/blog\/style-de-programmation-r-meilleures-pratiques\/\"},\"author\":{\"name\":\"Alboukadel\",\"@id\":\"https:\/\/www.datanovia.com\/en\/fr\/#\/schema\/person\/7767cf2bd5c91a1610c6eb53a0ff069e\"},\"headline\":\"Style de Programmation R: Meilleures Pratiques\",\"datePublished\":\"2020-03-06T20:57:23+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.datanovia.com\/en\/fr\/blog\/style-de-programmation-r-meilleures-pratiques\/\"},\"wordCount\":1497,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/www.datanovia.com\/en\/fr\/#organization\"},\"image\":{\"@id\":\"https:\/\/www.datanovia.com\/en\/fr\/blog\/style-de-programmation-r-meilleures-pratiques\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.datanovia.com\/en\/wp-content\/uploads\/2019\/05\/X50589436_796126424060637_4634267315792248832_n.jpg\",\"articleSection\":[\"Programmation R\"],\"inLanguage\":\"fr-FR\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/www.datanovia.com\/en\/fr\/blog\/style-de-programmation-r-meilleures-pratiques\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.datanovia.com\/en\/fr\/blog\/style-de-programmation-r-meilleures-pratiques\/\",\"url\":\"https:\/\/www.datanovia.com\/en\/fr\/blog\/style-de-programmation-r-meilleures-pratiques\/\",\"name\":\"Style de Programmation R: Meilleures Pratiques - Datanovia\",\"isPartOf\":{\"@id\":\"https:\/\/www.datanovia.com\/en\/fr\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/www.datanovia.com\/en\/fr\/blog\/style-de-programmation-r-meilleures-pratiques\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/www.datanovia.com\/en\/fr\/blog\/style-de-programmation-r-meilleures-pratiques\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.datanovia.com\/en\/wp-content\/uploads\/2019\/05\/X50589436_796126424060637_4634267315792248832_n.jpg\",\"datePublished\":\"2020-03-06T20:57:23+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/www.datanovia.com\/en\/fr\/blog\/style-de-programmation-r-meilleures-pratiques\/#breadcrumb\"},\"inLanguage\":\"fr-FR\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.datanovia.com\/en\/fr\/blog\/style-de-programmation-r-meilleures-pratiques\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"fr-FR\",\"@id\":\"https:\/\/www.datanovia.com\/en\/fr\/blog\/style-de-programmation-r-meilleures-pratiques\/#primaryimage\",\"url\":\"https:\/\/www.datanovia.com\/en\/wp-content\/uploads\/2019\/05\/X50589436_796126424060637_4634267315792248832_n.jpg\",\"contentUrl\":\"https:\/\/www.datanovia.com\/en\/wp-content\/uploads\/2019\/05\/X50589436_796126424060637_4634267315792248832_n.jpg\",\"width\":1024,\"height\":512},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.datanovia.com\/en\/fr\/blog\/style-de-programmation-r-meilleures-pratiques\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/www.datanovia.com\/en\/fr\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Style de Programmation R: Meilleures Pratiques\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.datanovia.com\/en\/fr\/#website\",\"url\":\"https:\/\/www.datanovia.com\/en\/fr\/\",\"name\":\"Datanovia\",\"description\":\"Exploration de Donn\u00e9es et Statistiques pour l'Aide \u00e0 la D\u00e9cision\",\"publisher\":{\"@id\":\"https:\/\/www.datanovia.com\/en\/fr\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/www.datanovia.com\/en\/fr\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"fr-FR\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/www.datanovia.com\/en\/fr\/#organization\",\"name\":\"Datanovia\",\"url\":\"https:\/\/www.datanovia.com\/en\/fr\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"fr-FR\",\"@id\":\"https:\/\/www.datanovia.com\/en\/fr\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/www.datanovia.com\/en\/wp-content\/uploads\/2018\/09\/datanovia-logo.png\",\"contentUrl\":\"https:\/\/www.datanovia.com\/en\/wp-content\/uploads\/2018\/09\/datanovia-logo.png\",\"width\":98,\"height\":99,\"caption\":\"Datanovia\"},\"image\":{\"@id\":\"https:\/\/www.datanovia.com\/en\/fr\/#\/schema\/logo\/image\/\"}},{\"@type\":\"Person\",\"@id\":\"https:\/\/www.datanovia.com\/en\/fr\/#\/schema\/person\/7767cf2bd5c91a1610c6eb53a0ff069e\",\"name\":\"Alboukadel\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"fr-FR\",\"@id\":\"https:\/\/www.datanovia.com\/en\/fr\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/ed3108646c5c7c3d188324ab972f96ad7d9975b41b94014d7f68257791be395a?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/ed3108646c5c7c3d188324ab972f96ad7d9975b41b94014d7f68257791be395a?s=96&d=mm&r=g\",\"caption\":\"Alboukadel\"},\"url\":\"https:\/\/www.datanovia.com\/en\/fr\/blog\/author\/kassambara\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Style de Programmation R: Meilleures Pratiques - Datanovia","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.datanovia.com\/en\/fr\/blog\/style-de-programmation-r-meilleures-pratiques\/","og_locale":"fr_FR","og_type":"article","og_title":"Style de Programmation R: Meilleures Pratiques - Datanovia","og_description":"Cet article d\u00e9crit les \u00e9l\u00e9ments essentiels des meilleures pratiques du style de codage R. Il est bas\u00e9 sur le [style tidyverse] (https:\/\/style.tidyverse.org\/). Le guide actuel de Gougle est \u00e9galement d\u00e9riv\u00e9 [&hellip;]","og_url":"https:\/\/www.datanovia.com\/en\/fr\/blog\/style-de-programmation-r-meilleures-pratiques\/","og_site_name":"Datanovia","article_published_time":"2020-03-06T20:57:23+00:00","og_image":[{"width":1024,"height":512,"url":"https:\/\/www.datanovia.com\/en\/wp-content\/uploads\/2019\/05\/X50589436_796126424060637_4634267315792248832_n.jpg","type":"image\/jpeg"}],"author":"Alboukadel","twitter_card":"summary_large_image","twitter_misc":{"\u00c9crit par":"Alboukadel","Dur\u00e9e de lecture estim\u00e9e":"10 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.datanovia.com\/en\/fr\/blog\/style-de-programmation-r-meilleures-pratiques\/#article","isPartOf":{"@id":"https:\/\/www.datanovia.com\/en\/fr\/blog\/style-de-programmation-r-meilleures-pratiques\/"},"author":{"name":"Alboukadel","@id":"https:\/\/www.datanovia.com\/en\/fr\/#\/schema\/person\/7767cf2bd5c91a1610c6eb53a0ff069e"},"headline":"Style de Programmation R: Meilleures Pratiques","datePublished":"2020-03-06T20:57:23+00:00","mainEntityOfPage":{"@id":"https:\/\/www.datanovia.com\/en\/fr\/blog\/style-de-programmation-r-meilleures-pratiques\/"},"wordCount":1497,"commentCount":0,"publisher":{"@id":"https:\/\/www.datanovia.com\/en\/fr\/#organization"},"image":{"@id":"https:\/\/www.datanovia.com\/en\/fr\/blog\/style-de-programmation-r-meilleures-pratiques\/#primaryimage"},"thumbnailUrl":"https:\/\/www.datanovia.com\/en\/wp-content\/uploads\/2019\/05\/X50589436_796126424060637_4634267315792248832_n.jpg","articleSection":["Programmation R"],"inLanguage":"fr-FR","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.datanovia.com\/en\/fr\/blog\/style-de-programmation-r-meilleures-pratiques\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.datanovia.com\/en\/fr\/blog\/style-de-programmation-r-meilleures-pratiques\/","url":"https:\/\/www.datanovia.com\/en\/fr\/blog\/style-de-programmation-r-meilleures-pratiques\/","name":"Style de Programmation R: Meilleures Pratiques - Datanovia","isPartOf":{"@id":"https:\/\/www.datanovia.com\/en\/fr\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.datanovia.com\/en\/fr\/blog\/style-de-programmation-r-meilleures-pratiques\/#primaryimage"},"image":{"@id":"https:\/\/www.datanovia.com\/en\/fr\/blog\/style-de-programmation-r-meilleures-pratiques\/#primaryimage"},"thumbnailUrl":"https:\/\/www.datanovia.com\/en\/wp-content\/uploads\/2019\/05\/X50589436_796126424060637_4634267315792248832_n.jpg","datePublished":"2020-03-06T20:57:23+00:00","breadcrumb":{"@id":"https:\/\/www.datanovia.com\/en\/fr\/blog\/style-de-programmation-r-meilleures-pratiques\/#breadcrumb"},"inLanguage":"fr-FR","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.datanovia.com\/en\/fr\/blog\/style-de-programmation-r-meilleures-pratiques\/"]}]},{"@type":"ImageObject","inLanguage":"fr-FR","@id":"https:\/\/www.datanovia.com\/en\/fr\/blog\/style-de-programmation-r-meilleures-pratiques\/#primaryimage","url":"https:\/\/www.datanovia.com\/en\/wp-content\/uploads\/2019\/05\/X50589436_796126424060637_4634267315792248832_n.jpg","contentUrl":"https:\/\/www.datanovia.com\/en\/wp-content\/uploads\/2019\/05\/X50589436_796126424060637_4634267315792248832_n.jpg","width":1024,"height":512},{"@type":"BreadcrumbList","@id":"https:\/\/www.datanovia.com\/en\/fr\/blog\/style-de-programmation-r-meilleures-pratiques\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.datanovia.com\/en\/fr\/"},{"@type":"ListItem","position":2,"name":"Style de Programmation R: Meilleures Pratiques"}]},{"@type":"WebSite","@id":"https:\/\/www.datanovia.com\/en\/fr\/#website","url":"https:\/\/www.datanovia.com\/en\/fr\/","name":"Datanovia","description":"Exploration de Donn\u00e9es et Statistiques pour l'Aide \u00e0 la D\u00e9cision","publisher":{"@id":"https:\/\/www.datanovia.com\/en\/fr\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.datanovia.com\/en\/fr\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"fr-FR"},{"@type":"Organization","@id":"https:\/\/www.datanovia.com\/en\/fr\/#organization","name":"Datanovia","url":"https:\/\/www.datanovia.com\/en\/fr\/","logo":{"@type":"ImageObject","inLanguage":"fr-FR","@id":"https:\/\/www.datanovia.com\/en\/fr\/#\/schema\/logo\/image\/","url":"https:\/\/www.datanovia.com\/en\/wp-content\/uploads\/2018\/09\/datanovia-logo.png","contentUrl":"https:\/\/www.datanovia.com\/en\/wp-content\/uploads\/2018\/09\/datanovia-logo.png","width":98,"height":99,"caption":"Datanovia"},"image":{"@id":"https:\/\/www.datanovia.com\/en\/fr\/#\/schema\/logo\/image\/"}},{"@type":"Person","@id":"https:\/\/www.datanovia.com\/en\/fr\/#\/schema\/person\/7767cf2bd5c91a1610c6eb53a0ff069e","name":"Alboukadel","image":{"@type":"ImageObject","inLanguage":"fr-FR","@id":"https:\/\/www.datanovia.com\/en\/fr\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/ed3108646c5c7c3d188324ab972f96ad7d9975b41b94014d7f68257791be395a?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/ed3108646c5c7c3d188324ab972f96ad7d9975b41b94014d7f68257791be395a?s=96&d=mm&r=g","caption":"Alboukadel"},"url":"https:\/\/www.datanovia.com\/en\/fr\/blog\/author\/kassambara\/"}]}},"multi-rating":{"mr_rating_results":[]},"_links":{"self":[{"href":"https:\/\/www.datanovia.com\/en\/fr\/wp-json\/wp\/v2\/posts\/15119","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.datanovia.com\/en\/fr\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.datanovia.com\/en\/fr\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.datanovia.com\/en\/fr\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.datanovia.com\/en\/fr\/wp-json\/wp\/v2\/comments?post=15119"}],"version-history":[{"count":1,"href":"https:\/\/www.datanovia.com\/en\/fr\/wp-json\/wp\/v2\/posts\/15119\/revisions"}],"predecessor-version":[{"id":15121,"href":"https:\/\/www.datanovia.com\/en\/fr\/wp-json\/wp\/v2\/posts\/15119\/revisions\/15121"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.datanovia.com\/en\/fr\/wp-json\/wp\/v2\/media\/15120"}],"wp:attachment":[{"href":"https:\/\/www.datanovia.com\/en\/fr\/wp-json\/wp\/v2\/media?parent=15119"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.datanovia.com\/en\/fr\/wp-json\/wp\/v2\/categories?post=15119"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.datanovia.com\/en\/fr\/wp-json\/wp\/v2\/tags?post=15119"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}