Vorrei creare una classe S4 dotata di slot che possano contenere modelli lineari robusti.Come posso creare uno slot in una classe S4 per modelli lineari robusti?
I modelli lineari robusti sono un tipo di modello lineare dal pacchetto MASS
. Portano tutte le informazioni di un modello lineare e un po 'di più.
library(MASS)
x <- 1:5
y <- 1:5
mylm <- lm(x~y)
myrlm <- rlm(x~y)
Qui è la mia classe:
.MyClass <- setClass("MyClass", list(a="lm", id="numeric"))
Anche se .MyClass(a=mylm, id=1)
produce l'oggetto previsto, l'inizializzazione di un oggetto con un rlm
fallisce:
> .MyClass(a=myrlm, id=1)
Error in validObject(.Object) :
invalid class “MyClass” object: 1: invalid object for slot "a" in class "MyClass": got class "rlm", should be or extend class "lm"
invalid class “MyClass” object: 2: invalid object for slot "a" in class "MyClass": got class "lm", should be or extend class "lm"
avrei pensato che, dal momento is(myrlm, "lm")
rendimenti TRUE
non ci sarebbe stato un problema e l'oggetto potrebbe entrare nello slot. Inoltre, poiché mi sta dicendo che ho creato un oggetto non valido due volte, perché il secondo che dice che lm
non è esso stesso? È perché lm
è una classe virtuale?
Ho provato a impostare a="list"
nella rappresentazione (dal lm
e rlm
sono entrambe le liste), ma che produce un errore simile. Lo slot ha bisogno di un diverso tipo di classe? Ho anche provato a impostare a="rlm"
, ma rlm
non è una classe definita.
ottima domanda. Sospetto che tu stia cadendo in un inferno di incompatibilità S3/S4, ma spero (per il tuo bene) che tu non lo sia. Potresti (???) provare a creare una classe S4 che comprenda/avvolga la classe "rlm" di S3 ...? –