34  Personnaliser la configuration de R

L’agent souhaite personnaliser sa configuration de R. Cette personnalisation consiste à définir certaines actions ou valeurs qui seront effectuées automatiquement à l’ouverture d’une session R.

Tâche concernée et recommandation

La personnalisation de R doit être maniée avec précaution, car personnaliser votre environnement de travail, c’est prendre le risque de rendre vos travaux difficiles à reproduire. Cette fiche vous explique ce que la personnalisation peut apporter, et ce pour quoi elle ne doit pas être utilisée.

Il est recommandé de ne pas personnaliser la configuration de R, sauf dans les cas suivants :

  • masquer des informations qui ne doivent pas figurer dans les programmes, comme les clés d’API ;
  • modifier des paramètres dont les valeurs par défaut ne sont pas adaptées au travail avec R à l’Insee, comme le proxy ou les chemins vers des exécutables ;
  • changer des éléments qui n’ont aucun impact sur les résultats, mais peuvent vous faciliter la vie, comme la taille de l’historique, l’adresse des dépôts de package, le texte de l’invite de commande, etc.

34.1 Comprendre le lancement de R

34.1.1 Vue d’ensemble de l’initialisation de R

Dès ses origines, R a été conçu pour offrir une grande souplesse d’utilisation. Cette souplesse engendre toutefois une complexité dans les procédures d’initialisation de R. La documentation sur le lancement de R montre d’ailleurs toute la complexité de la chose :

help("Startup")

De façon simplifiée, la procédure d’initialisation de R se déroule en trois temps :

  1. R cherche des fichiers de type environment. Ces fichiers permettent notamment d’indiquer des chemins spécifiques où se trouvent d’autres fichiers, ou certaines caractéristiques comme le proxy.

  2. R cherche des fichiers de type profile. Ces fichiers contiennent du code R qui se lance automatiquement au démarrage de R. Ils permettent par exemple d’indiquer des packages supplémentaires à charger, de personnaliser le message d’accueil de R, ou de sauvegarder automatiquement les informations de la session lorsqu’on la quitte.

  3. R prépare l’ouverture de la session avec R, avec les informations récupérées précédemment dans les fichiers environment et profile, et d’autres informations, comme par exemple les données qui ont pu être conservées dans un .Rdata. R charge les packages de base (installés avec R), avant de charger l’historique des commandes (s’il en existe un). C’est lors de ce dernier temps que R peut charger les données et l’historique après s’être interrompu inopinément.

Enfin, il existe d’autres fichiers comme le .Rhistory qui contient l’historique des commandes, notamment celles réalisées à la console. Ce fichier peut également contenir des informations sensibles, il est donc rare de le partager, mais il est possible de le conserver.

34.1.2 Configuration générale et configuration par projet

Il est possible de personnaliser votre configuration de R en définissant des fichiers environment et profile. Ces fichiers peuvent être définis à deux niveaux qu’il faut bien distinguer :

  • la configuration générale de R, qui s’applique à toutes les sessions R que vous ouvrez. Dans ce cas, les fichiers de configuration doivent être placés dans le répertoire Home. Vous pouvez récupérer le chemin de ce répertoire en exécutant la commande Sys.getenv("HOME") (sous Windows, typiquement Mes documents).
  • la configuration spécifique à un Rproject (projet RStudio), qui s’applique uniquement lorsque vous travaillez sur ce projet. Dans ce cas, les fichiers de configuration doivent être placés dans le répertoire du Rproject auquel ils s’appliquent.

Définir des fichiers environment et profile spécifiques à un Rproject s’avère très utile lorsque les projets sur lesquels vous travaillez requièrent des configurations de R différentes.

Un point essentiel est qu’une session R ne charge qu’un seul fichier environment et un seul fichier profile. Les fichiers de configurations sont chargés par ordre de spécificité décroissant :

  1. les fichiers présents dans le répertoire d’un Rproject sont prioritaires ;
  2. à défaut, les fichiers présents dans le répertoire Home ;
  3. à défaut, les fichiers présents dans le répertoire d’installation de R.

Ajouter un fichier environment dans le répertoire d’un Rproject aura donc pour conséquence que l’éventuel fichier environment présent dans le répertoire Home ne sera pas chargé par la session R lorsque vous travaillerez sur ce projet.

34.2 Personnaliser sa configuration

34.2.1 Le fichier .Renviron

Le fichier d’environnement .Renviron sert à définir des variables d’environnement. Ces variables sont utiles pour R lui-même ou pour les interactions entre R et d’autres logiciels. Ces variables d’environnement peuvent également modifier la manière dont R réalise certaines opérations.

Par exemple, un .Renviron fictif pourrait ressembler à ceci :

MON_API_INSEE=MaCleSecreteVraimentTresSecrete
http_proxy=le_proxy
https_proxy=le_proxy
_R_CHECK_LENGTH_1_LOGIC2_=verbose
_R_CHECK_LENGTH_1_CONDITION_=true

Un tel fichier n’est pas constitué de code R, mais de paires nom=valeur. Chaque paire définit une variable d’environnement qui sera exploitée par R pour interagir avec d’autres logiciels, ou directement pour lui. Ce fichier fictif réalise les opérations suivantes :

  • il définit la clé d’API dans une variable MON_API_INSEE. Ultérieurement, un script R pourra faire appel à cette variable via la commande Sys.getenv("MON_API_INSEE"). De cette façon, la clé confidentielle n’est pas directement visible dans le script R, et ce script peut être partagé en toute sécurité ;
  • il modifie les paramètres du proxy pour permettre à R de se connecter à Internet ;
  • il modifie des variables internes à R (telles que _R_CHECK_LENGTH_1_CONDITION_ et _R_CHECK_LENGTH_1_LOGIC2_) ;
  • il contient une ligne vide finale : cette ligne vide est indispensable, ne l’oubliez jamais !
Tip

Voici deux conseils importants sur l’usage du fichier d’environnement .Renviron :

  • il est recommandé d’être très prudent dans la personnalisation du fichier d’environnement ;
  • le fichier .Renviron peut contenir des informations personnelles et/ou sensibles comme les clés d’API ou l’adresse du proxy. Ce fichier est donc strictement personnel, et ne doit pas être partagé (notamment via git).

La méthode la plus simple pour modifier le fichier .Renviron est la suivante :

  1. Ouvrir le fichier .Renviron. La commande usethis::edit_r_environ() permet d’ouvrir le fichier .Renviron de votre profil utilisateur (c’est le fichier d’environnement utilisé lorsqu’il n’y a pas de fichier d’environnement à votre projet). Si vous travaillez dans un RProject, la commande usethis::edit_r_environ(scope = "project") permet d’ouvrir le le fichier .Renviron spécifique à votre projet.
  2. Modifier le fichier, sans oublier la ligne vide en fin de document.
  3. Sauvegarder le fichier.
  4. Relancer R, via Session > Restart R ou Ctrl + ⇧ Shift + F10 dans RStudio.
Spécificité Insee

Comme dans de nombreuses institutions, la navigation sur Internet depuis un poste de l’Insee est contrôlée par un proxy (intermédiaire entre le web et un ordinateur). Il est indispensable de paramétrer l’adresse du proxy pour que R puisse accéder à Internet (par exemple pour télécharger un package). Pour ce faire, vous pouvez récupérer l’adresse du proxy de l’Insee en exécutant la commande suivante :

Puis vous pouvez ajouter l’adresse du proxy dans votre fichier .Renviron. Il faut ajouter deux lignes dans ce fichier :

http_proxy=adresse_du_proxy
https_proxy=adresse_du_proxy

Il est également possible d’ajouter ces variables d’environnement au niveau du profil utilisateur Windows sur votre poste de travail Insee. Cela permet à tout processus lancé d’hériter automatiquement de ces variables d’environnement, évitant ainsi de réserver cette configuration uniquement pour R, comme dans la première option proposée. De nombreux autres logiciels utilisent par convention ces noms de variables d’environnement (http_proxy, https_proxy ou no_proxy) pour la configuration du proxy lorsqu’ils effectuent des requêtes HTTP ; il est donc possible de mutualiser ces paramètres. C’est notamment le cas d’outils en ligne de commande tels que le client pour des requêtes réseau curl ou des gestionnaires de paquets comme pip pour Python.

Pour ce faire, ouvrez l’interface de modification des variables d’environnement pour votre compte utilisateur en utilisant le raccourci clavier + R pour exécuter la commande rundll32 sysdm.cpl,EditEnvironmentVariables, puis ajoutez les nouvelles variables. Redémarrez ensuite R pour que cette modification prenne effet .

Il est possible de modifier les paramètres de son environnement ou d’en générer d’autres après l’ouverture de la session R, avec la commande Sys.setenv(). Vous pouvez par exemple exécuter la commande Sys.setenv("MON_API_INSEE"="jamais"). De même, la fonction Sys.getenv() permet de lister certaines valeurs présentes dans l’environnement actuel. Toutefois, toutes les procédures d’initialisation de R se seront déjà déroulées alors avec les anciennes valeurs, définies par défaut. Cette subtilité peut être importante !

34.2.2 Le fichier .Rprofile

Le fichier .RProfile contient du code R qui sera exécuté par R après le chargement des fichiers .Renviron. Voici trois utilisations standards du fichier .Rprofile :

  • modifier le miroir par défaut du CRAN (pour télécharger des packages) ;
  • modifier le message d’accueil de la session ;
  • personnaliser l’affichage de R.

Un fichier .Rprofile peut par exemple ressembler à ceci :

options(repos = c(CRAN = "https://cran.rstudio.org"))
options(prompt="R> ", digits=4)
options(continue= "+++ ")
if (interactive()) {
options(width = 120)
}

.First <- function(){
cat("\n Allez, hop hop hop, au travail !\n\n")
}
.Last <- function(){
cat("\n Je m'en vais comme un prince...\n\n")
}

Ce fichier .Rprofile permet de :

  • définir un miroir par défaut pour le CRAN ;
  • modifier l’affichage de l’invite de commande (le “>” de début de ligne devient “R>”) ;
  • modifier l’affichage par défaut des nombres décimaux ;
  • modifier l’affichage de la console lorsqu’une partie du code reste à écrire (le “+” en début de ligne devient “+++”) ;
  • dans le cadre d’un appel à la console, la largeur des impressions est fixée à 120 ;
  • les fonctions .First et .Last permettent d’effectuer des opérations spécifiques au lancement et à la fermeture de la session R (imprimer du texte dans le cas présent) ;
  • Attention, comme précédemment, un fichier .Rprofile doit impérativement se terminer par une ligne vierge.

La fonction options() affiche les valeurs actuellement chargées pour les options. Il est possible de les modifier à la volée avec la commande options(nom_de_l_option = valeur_de_l_option). Attention toutefois, modifier une option avec la fonction options() n’est valable que pour la session de R actuellement active ! Si R redémarre, toutes les options modifiées à la volée ne sont plus prises en compte. Si vous voulez modifier durablement la valeur d’une option, il est préférable de modifier le fichier .Rprofile.

Un exemple plus réaliste de .Rprofile peut être trouvé ici : c’est le fichier qui permet notamment de réaliser la documentation utilitR. Notez notamment le message à l’ouverture du projet. Avoir des fonctions n’est pas forcément interdit, tant que ces fonctions sont également partagées, comme c’est le cas dans ce projet !

Tip

Il n’est nullement obligatoire de définir des réglages spécifiques avec un fichier .Rprofile. Toutefois, si vous le faites, il est fortement conseillé de :

  • travailler dans le .Rprofile d’un projet, et non pas le .Rprofile général de votre profil d’utilisateur ;
  • partager le fichier .Rprofile du projet avec les autres contributeurs du projet via une forge logicielle, après avoir vérifié qu’il ne contenait aucune information sensible.

Il est fortement déconseillé de réaliser les actions suivantes dans le fichier .Rprofile :

  • charger des packages ;
  • définir des alias de fonctions ;
  • modifier le comportement par défaut de R, comme par exemple options(stringsAsFactors = FALSE).

En effet, toute personne qui ne dispose pas de ce fichier de configuration ne sera pas en mesure de reproduire vos travaux.

34.3 Quelques bonnes pratiques

La personnalisation de R est une opération sensible qui ne doit pas interférer avec l’exigence de reproductibilité des travaux statistiques. Cette personnalisation doit donc porter uniquement sur des modifications sans impact sur les calculs et sur des informations ayant vocation à ne pas être diffusées. Ces informations à ne pas diffuser peuvent être de deux types :

  • informations sensibles (comme les identifiants d’API ou les paramètres de proxy). Il est important que ces informations ne figurent pas dans les programmes de façon à pouvoir partager librement les codes ;
  • informations d’infrastructure (comme les chemins vers des exécutables). Ces informations n’ont pas vocation à être partagées, car elles varient d’un poste d’un agent à l’autre.

Les autres opérations modifiant le comportement de base (comme options(stringsAsFactors = FALSE)) doivent être partagées et accessibles, via le fichier .Rprofile. Pour information, depuis R version 4.0, la valeur de stringsAsFactors est FALSE par défaut, alors qu’elle était TRUE pour les versions antérieures.

34.4 Pour en savoir plus

L’immense majorité de la documentation sur l’utilisation des fichiers de configuration de R est en langue anglaise :