Code
# Installation du package R6 (si nécessaire)
# install.packages("R6")
# Chargement du package R6
library(R6)Wilson Toussile1 2
1ENSPY, 2ESSFAR
May 29, 2025
R6 est un système de classes plus récent en R qui suit un modèle de programmation orientée objet (POO) plus traditionnel, similaire à ceux que l’on trouve dans des langages comme Python ou Java. Pour utiliser R6, vous devez d’abord installer et charger le package R6.
R6Class()Les classes R6 sont définies à l’aide de la fonction R6Class(). Cette fonction permet de spécifier les champs (attributs) et les méthodes (fonctions) de la classe.
Example 1
R6public ou private.public ou private.self : Dans les méthodes R6, self fait référence à l’objet courant.R6 permet de définir des méthodes et des champs publics (accessibles depuis l’extérieur de l’objet) et privés (accessibles uniquement depuis l’intérieur de l’objet).
Example 2
library(R6)
Personne <- R6Class(
1 "Personne",
private = list(
neLe = NULL
2 ),
public = list(
3 nom = NULL,
initialize = function(nom, neLe) {
stopifnot(
exprs = {
is.character(nom)
inherits(neLe, "Date")
}
)
self$nom <- nom
private$neLe <- neLe
4 },
age = function() {
annee_naissance <- as.numeric(format(private$neLe, "%Y"))
annee_courante <- as.numeric(format(Sys.Date(), "%Y"))
return(annee_courante - annee_naissance)
5 },
setNeLe = function(nouvelle_date) {
if (!inherits(nouvelle_date, "Date")) {
stop("La date de naissance doit être de type Date.")
}
private$neLe <- nouvelle_date
6 },
getNeLe = function(){
private$neLe
7 },
print = function() {
cat("Personne :", self$nom, "\n")
cat("Âge :", self$age(), "ans\n")
cat("Date de naissance :", private$neLe, "\n")
8 }
)
)
# Création d'un objet Personne
9john <- Personne$new("John Doe", as.Date("1993-05-15"))
# Utilisation de la méthode age()
john$age()
# Utilisation de la méthode print()
john$print()
# Utilisation du mutateur set_date_naissance()
john$setNeLe(as.Date("1992-07-20"))
# Vérification de la mise à jour
john$print()
# Tentative de modification directe (provoque une erreur)
#john$neLe <- as.Date("1990-01-01")[1] 32
Personne : John Doe
Âge : 32 ans
Date de naissance : 8535
Personne : John Doe
Âge : 33 ans
Date de naissance : 8236
R6 permet de créer des classes qui héritent des champs et des méthodes d’autres classes.
Example 3
Etudiant <- R6Class(
"Etudiant",
1 inherit = Personne,
public = list(
matricule = NULL,
initialize = function(nom, neLe, matricule) {
2 super$initialize(nom, neLe)
self$matricule <- matricule
},
print = function() {
3 super$print()
cat("Matricule :", self$matricule, "\n")
}
)
)
alice <- Etudiant$new("Alice Smith", as.Date("1992-07-20"), "12345")
alice$print()print de la classe mère
Personne : Alice Smith
Âge : 33 ans
Date de naissance : 8236
Matricule : 12345
R6 est souvent utilisé pour :
Dans la section suivante, nous comparerons en détail les systèmes de classes S3, S4 et R6.