Travailler avec les fichiers
Fait partie de la section Programmation orientée objet du Journey R de Coddy. Leçon 1 sur 57.
Les programmes réels sont répartis dans plusieurs fichiers. En R, source("Greeting.R") exécute un autre fichier de haut en bas, et toutes les fonctions définies dans ce fichier sont disponibles ensuite :
# 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 démarre dans le fichier que vous exécutez, ici main.R, et R le lit ligne par ligne. L’ordre compte : une fonction existe seulement après que le fichier qui la définit a été chargé avec source(). Les lignes source() doivent donc se trouver en haut :
# main.R
cat(greeting("Ada"), "\n") # Erreur : fonction "greeting" introuvable
source("Greeting.R")
cat(greeting("Ada"), "\n") # fonctionne : greeting() existe maintenantLa disposition habituelle consiste à avoir une classe par fichier, nommé 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 défis de cette section, ton 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 # fonctions génériques communes à toutes les formes : charger ce fichier en premier
Circle.R # la classe du cercle et ses méthodes
main.R # source("Shape.R"); source("Circle.R"); lit les données d’entrée et affiche les résultatssource() exécute un fichier dans l’environnement global, donc ses fonctions et ses variables deviennent des noms globaux. R ne possède pas de noms privés à un fichier : si deux fichiers définissent helper(), c’est celui du dernier fichier sourcé qui l’emporte. Une valeur seule sur sa ligne dans un fichier sourcé n’est pas non plus affichée ; les fichiers qui doivent afficher quelque chose appellent donc cat() :
# Tools.R
total <- 0 # une variable globale une fois le fichier chargé
42 # non affiché par source()
helper <- function(x) x * 2
# Other.R
helper <- function(x) x + 1 # chargé plus tard : remplace le helper ci-dessusDéfi
FacileLe programme comporte deux fichiers. main.R charge Greeting.R, lit des noms et affiche le résultat de greeting(name) pour chacun. Complète greeting() dans Greeting.R pour qu’elle renvoie Hello, Ada! pour le nom Ada, ou Hello, friend! lorsque le nom est vide.
Ton 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 : conservez-le 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