Travailler avec les fichiers
Fait partie de la section Programmation orientée objet du Journey R de Coddy. Leçon 1 sur 57.
Les vrais programmes sont répartis entre plusieurs fichiers. En R, source("Greeting.R") exécute un autre fichier de haut en bas, et chaque fonction définie par ce fichier est ensuite disponible :
# Greeting.R
greeting <- function(name) {
paste0("Hello, ", name, "!")
}
# main.R
source("Greeting.R")
cat(greeting("Ada"), "\n")L’exécution de main.R affiche Hello, Ada! : la ligne source() charge greeting() avant que main.R ne l’appelle.
Le programme commence dans le fichier que vous exécutez, ici main.R, et R le lit ligne par ligne. L’ordre compte : une fonction n’existe qu’après que le fichier qui la définit a été chargé, les lignes source() doivent donc se trouver en haut :
# main.R
cat(greeting("Ada"), "\n") # Erreur : impossible de trouver la fonction "greeting"
source("Greeting.R")
cat(greeting("Ada"), "\n") # fonctionne : greeting() existe maintenantLa structure habituelle est une classe par fichier, nommée d’après la classe : Account.R contient le constructeur account et ses méthodes, Shape.R contient les génériques shape. Dans les exercices de cette section, votre code va dans ces fichiers, et main.R contient le code d’entrée/sortie fourni, avec les lignes source() déjà placées en haut, dans le bon ordre. L’éditeur affiche chaque fichier sous forme d’onglet.
Shape.R # génériques partagés par chaque forme : sourcez-le en premier
Circle.R # la classe circle et ses méthodes
main.R # source("Shape.R"); source("Circle.R"); lit l'entrée, imprime les résultatssource() exécute un fichier dans l’environnement global, de sorte que ses fonctions et ses variables deviennent des noms globaux. R ne possède pas de noms privés au niveau des fichiers : si deux fichiers définissent helper(), le dernier fichier chargé l’emporte. Une valeur placée seule sur une ligne dans un fichier chargé n’est pas non plus affichée, donc les fichiers qui doivent afficher quelque chose appellent cat() :
# Tools.R
total <- 0 # une variable globale une fois sourcée
42 # non imprimé par source()
helper <- function(x) x * 2
# Other.R
helper <- function(x) x + 1 # sourcé plus tard : remplace le helper ci-dessusDéfi
FacileLe programme comporte deux fichiers. main.R charge Greeting.R, lit les noms et affiche le résultat de greeting(name) pour chacun. Complétez greeting() dans Greeting.R afin qu’il renvoie Hello, Ada! pour le nom Ada, ou Hello, friend! lorsque le nom est vide.
Votre code doit se trouver dans Greeting.R. main.R contient le code d’entrée/sortie fourni et ne peut pas être modifié.
Essayez vous-même
source("Greeting.R")
# Code d'entrée/sortie fourni : le laisser tel quel
input <- suppressWarnings(readLines(file("stdin")))
for (name in input) cat(greeting(name), "\n", sep = "")
Cette leçon comprend un petit quiz. Commencez la leçon pour y répondre et suivre votre progression.
Toutes les leçons de Programmation orientée objet
1Bases de S3
Travailler avec les fichiersListes avec une classeFonctions constructricesMéthodes print et formatValidateurs et fonctions utilitairesRécapitulatif - Températures4Encapsulation dans R
Les fermetures comme objetsLes environnements comme objetsFonctions d’accèsProtéger l’étatRécapitulatif - Parcmètre2S3 : génériques et méthodes
Génériques et UseMethodMéthodes par défautMéthodes pour les génériques de baseNotions de base sur NextMethodRécapitulatif - Aires des formes5Classes S4
Définir des classes S4Slots et accèsVérifications de validitéMéthodes showRécapitulatif - Catalogue de produits8Classes de référence
Définition des classes de référenceMéthodes et mises à jour des champsSémantique de copieHéritage et callSuperRécapitulatif - File d’attente des tâches11Projet : gestion de bibliothèque
Livres et membresEmprunter des livres3Héritage S3
Vecteurs de classesOrdre de recherche des méthodesÉtendre avec NextMethodVérifier avec inherits()Récapitulatif - Paie du personnelEntraînez-vous par vous-même : Compilateur R en ligne