Я хотел бы создать класс S4, в котором есть слоты, в которых могут храниться надежные линейные модели.
Надежные линейные модели — это тип линейной модели из пакета MASS
. Они несут всю информацию, которую имеет линейная модель, и немного больше.
library(MASS)
x <- 1:5
y <- 1:5
mylm <- lm(x~y)
myrlm <- rlm(x~y)
Вот мой класс:
.MyClass <- setClass("MyClass", list(a="lm", id="numeric"))
Несмотря на то, что .MyClass(a=mylm, id=1)
создает ожидаемый объект, инициализация объекта с помощью rlm
завершается ошибкой:
> .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"
Я бы подумал, что, поскольку is(myrlm, "lm")
возвращает TRUE
, проблем не будет, и объект сможет поместиться в слот. Кроме того, поскольку он говорит мне, что я дважды создал недопустимый объект, почему второй говорит, что lm
не является самим собой? Это потому, что lm
— виртуальный класс?
Я попытался установить a="list"
в представлении (поскольку lm
и rlm
оба являются списками), но это приводит к аналогичной ошибке. Нужен ли слоту другой тип класса? Я также пытался установить a="rlm"
, но rlm
не является определенным классом.