Essayez
methods(residuals)
qui liste, entre autres, "residuals.lm" et "residuals.glm". Cela signifie que lorsque vous avez ajusté un modèle linéaire, m, et que vous tapez residuals(m)
le fichier residuals.lm sera appelé. Lorsque vous avez ajusté un modèle linéaire généralisé, residuals.glm sera appelé. C'est un peu le modèle objet C++ à l'envers. En C++, vous définissez une classe de base ayant des fonctions virtuelles, qui sont surchargées par les classes dérivées. En R, vous définissez une fonction virtuelle (c'est-à-dire générique), puis vous décidez quelles classes vont remplacer cette fonction (c'est-à-dire définir une méthode). Notez que les classes qui font cela n'ont pas besoin d'être dérivées d'une super classe commune. Je ne serais pas d'accord pour préférer généralement S3 à S4. S4 a plus de formalisme (= plus de typage) et cela peut être trop pour certaines applications. Les classes S4, cependant, peuvent être dé définies comme une classe ou une structure en C++. Vous pouvez spécifier qu'un objet d'une certaine classe est composé d'une chaîne de caractères et de deux chiffres par exemple :
setClass("myClass", representation(label = "character", x = "numeric", y = "numeric"))
Les méthodes qui sont appelées avec un objet de cette classe peuvent compter sur le fait que l'objet possède ces membres. C'est très différent des classes S3, qui ne sont qu'une liste d'éléments.
Avec S3 et S4, vous appelez une fonction membre par fun(object, args)
et non par object$fun(args)
. Si vous recherchez quelque chose comme ce dernier, jetez un coup d'œil au paquet proto.