.. toctree:: :maxdepth: 2 .. include:: weblinks.txt .. _using: Utiliser R ========== Exécuter des commandes R ------------------------ On peut exécuter des commandes R dans 2 modes différents: - R étant un langage interprété, les instructions peuvent être entrées directement dans la console de RStudio. Cette façon de faire est intéressante pour vérifier le comportement d'une fonction élémentaire ou pour exécuter des tâches brèves. - on peut également grouper les instructions dans un fichier :file:`.R` avec l'éditeur de texte de RStudio (ou un autre) et exécuter la totalité des instructions en une seule opération, via la commande :func:`source`. Obtenir de l'aide ----------------- Le temps consacré à ce cours ne permet pas de devenir un *R guru* et il fait partie du processus de développement de faire appel à internet. Aide intégrée ............. Pratique, la documentation de R est disponible via l'onglet ``Help`` de RStudio et son module de recherche. Ressources externes ................... La recherche sollicitant des ressources externes doit explicitement mentionner le nom du package ``tidyverse`` lorsqu'on le connait, et a minima l'écosystème ``tidyverse`` lui même lorsqu'on ne le connait pas. Le site `StackOverFlow `_ comporte généralement des réponses complètes et argumentées. Commandes R ----------- Une instruction élémentaire de R consiste en une expression, que l'on affecte ou pas à une variable. Ceci est une expression: .. code-block:: r > library(tidyverse) # "import" des packages de Tidyverse > starwars %>% filter(species == "Droid") # A tibble: 6 x 14 name height mass hair_color skin_color eye_color birth_year sex gender homeworld species films 1 C-3PO 167 75 NA gold yellow 112 none mascu… Tatooine Droid , starships Cette expression est évaluée, affichée mais le résultat n'est plus accessible. Pour réutilisation ultérieure, on peut affecter le résultat de l'évaluation d'une expression à une variable, et dans ce cas le résultat n'est pas affiché: .. code-block:: r > d <- starwars %>% filter(species == "Droid") On peut placer plusieurs commandes sur la même ligne en les séparant avec un ``;``: .. code-block:: r > d <- starwars %>% filter(species == "Droid") ; class(d) [1] "tbl_df" "tbl" "data.frame" Les accolades ``{`` et ``}`` sont utilisées pour définir des blocs de commandes dans :ref:`functions`, :ref:`grouping`, etc... Les commentaires sont identifiés par le caractère ``#`` qui permet d'ignorer tout ce qui suit. Si une commande est incomplète, un prompt secondaire ``+`` est affiché sur les lignes suivantes, jusqu'à ce que la commande soit syntaxiquement correcte. .. code-block:: r > starwars %>% + filter(species == "Droid") # A tibble: 6 x 14 name height mass hair_color skin_color eye_color birth_year sex gender homeworld species films 1 C-3PO 167 75 NA gold yellow 112 none mascu… Tatooine Droid , starships .. important:: En R, ``<-`` est l'opérateur d'affectation. Plus de détails :ref:`ultérieurement `. Exécuter les commandes contenues dans un fichier ------------------------------------------------ Lors de la phase de conception du process de traitement des données, il est pratique de travailler en mode interactif à partir de la console R. Lorsque les instructions sont regroupées dans un fichier, on exécute celles ci avec la commande :command:`source`: .. code-block:: r > source("commands.R") Stockage des résultats ---------------------- On peut intercepter les résultats des commandes, avec la fonction :func:`sink`. Tous les affichages sont redirigés vers un fichier texte: .. code-block:: r > sink("result.txt") > starwars %>% filter(species == "Droid") On rétablit l'affichage dans la console avec :func:`sink`: .. code-block:: r > sink() > starwars %>% filter(species == "Droid") # A tibble: 6 x 14 name height mass hair_color skin_color eye_color birth_year sex gender homeworld species films 1 C-3PO 167 75 NA gold yellow 112 none mascu… Tatooine Droid , starships Persistence des données ----------------------- Les structures que R crée et manipule en mémoire s'appelent des objets dans le vocabulaire R, bien qu'il n'y ait (presque) aucune similitude avec les objets des langages orientés objet (Python, Java, etc...). Dans R Studio ces objets sont présentés (par ordre alphabétique) dans l'onglet "Environment", avec une brève description. On peut les afficher sous la forme d'une simple liste dans la console avec la fonction :func:`objects` or :func:`ls`. La collection des objets présents en mémoire s'appelle l'espace de travail. .. code-block:: r > objects() [1] "d" > ls() [1] "d" Pour retirer un ou plusieurs objets de l'environnement, on utilise la fonction :func:`rm`: .. code-block:: r > rm(d) > ls() character(0) La fonction :func:`rm` accepte également un vecteur en paramètre. Si celui ci est initialisé avec la liste de tous les objets, ils sont tous détruits: .. code-block:: r > rm(list = ls()) Tous les objets créés durant une session R peuvent être stockés sur le disque pour réutilisation ultérieure. Lorsqu'on tente de fermer une session, la possibilité de sauvegarder ces objets est proposée. Si on répond par l'affirmative, ils sont stockés dans le fichier :file:`.RData` dans le répertoire courant. L'ensemble des commandes utilisées au cours de la session est stocké dans le fichier :file:`.Rhistory`. Si ces fichiers sont présents, ils sont utilisés au redémarrage d'une nouvelle session. .. important:: Pour une bonne structuration du travail, il est très fortement recommandé de créer un répertoire distinct pour chaque projet, chaque étude. Manipuler les fichiers et les répertoires ----------------------------------------- L'IDE R Studio propose une interface de manipulation des fichiers et des répertoires mais il peut être nécessaire d'y accéder via la console. Dans ce cadre :func:`getwd` retourne le chemin du répertoire courant: .. code-block:: r > getwd() [1] "C:/Users/courivad/Documents" et :func:`setwd` est utilisée pour changer de répertoire: .. code-block:: r > setwd('C:\\dir1\\dir2') # (Windows only) > setwd('C:/dir1/dir2') # (Windows & Linux) > setwd(file.path('C:', 'dir1', 'dir2')) # (Windows & Linux):: > setwd("c:/Users/courivad/Documents/R") > getwd() [1] "c:/Users/courivad/Documents/R" La fonction :func:`dir` retourne le contenu du répertoire courant (fichiers et répertoires), et :func:`list.dirs` retourne le contenu du répertoire courant (uniquement les répertoires)