Home
Aide mémoire R
Quelques librairies R
Liens & contact
Recherche :
Aide-memoire-R > Le-langage > Classes-S4

Classes S4.

Classes S4 : c'est la notion évoluée des classes sous R (voir classes S3 pour la comparaison entre les deux).

Définition d'une classe S4 :

setClass("Person",
         representation(firstname = "character", lastname = "character"),
         prototype(firstname = "Jean", lastname = "Dupond"),
         validity = function(object) { ## object : nom reserve !
           if (object@firstname == object@lastname)
             ## Person cannot have firstname equal to lastname
             return(FALSE)
           else
             return(TRUE)
         })
Attention, cela nécessite la librairie "methods" : mettre avant library(methods).

Définition d'une classe dérivée :

setClass("PersonWithAge",
         representation(age = "integer"),
         contains = "Person",
         validity = function(object) { ## object : nom reserve !
           if (object@firstname == object@lastname)
             ## Person cannot have firstname equal to lastname
             return(FALSE)
           else
             return(TRUE)
         })

Construction d'un objet :

Accès aux attributs de l'objet (slots) :

Méthode initialize :

setMethod("initialize",
          "Person",
          function(.Object, firstname, lastname) {
            print("initialize from Person called")
            .Object@firstname <- paste("Mr", firstname, sep = " ")
            .Object@lastname <- lastname
            validObject(.Object) ## valide l'objet
            return(.Object)
          })

Définition d'une méthode (qui ne modifie pas l'objet lui-même) :

Définition d'une méthode qui modifie un slot de l'objet :

Utilisation de méthodes d'indiçage :

On peut définir une méthode générique sans définir précisémment tous les arguments :

setGeneric("getComposedName",
           function(obj1, obj2, ...) {
             return(standardGeneric("getComposedName"))
           })

Méthode sur plusieurs objets et méthode qui dépend de la signature des objets donnés (choix exact de la méthode dépendra des objets donnés) :

setMethod("getComposedName",
          c(obj1 = "Person", obj2 = "Person"),
          function(obj1, obj2, separator) {
            return(paste(obj1@lastname, obj2@lastname, sep = separator))
          })
setMethod("getComposedName",
          c(obj1 = "character", obj2 = "Person"),
          function(obj1, obj2) {
            return(paste(obj1, obj2@lastname))
          })

Diverses méthodes pour récupérer des infos sur les classes et méthodes :


Dernière date de modification : 2010-01-02