R Version sein oder erweitern:Verwenden S3 virtuelle Klasse als Slot einer S4-Klasse, bekamen Fehler: got Klasse "S4", sollte Klasse "nls.lm"
R version 2.15.2 (2012-10-26)
Platform: x86_64-apple-darwin9.8.0/x86_64 (64-bit)
Ich mag eine S4-Klasse machen dass das Ausgangsobjekt der Funktion von nls.lm verwenden (Paket: minpack.lm) als Schlitz:
setOldClass("nls.lm")
setClass (
Class="TestClass",
representation=representation(
lmOutput = "nls.lm",
anumeric = "numeric"
)
)
Nun, wenn ich diese Klasse in einer „Konstruktorfunktion“ nennen möchte ich etwas tun kann, wie diese (korrekt?):
myConstructor <- function()
{
return(new("TestClass"))
}
pippo <- myConstructor()
pippo
An object of class "TestClass"
Slot "lmOutput":
<S4 Type Object>
attr(,".S3Class")
[1] "nls.lm"
Slot "anumeric":
numeric(0)
Und das Objekt „Pippo“ scheint korrekt initialisiert.
Wenn ich diesen Code verwenden stattdessen bekam ich einen Fehler:
myConstructor2 <- function()
{
pippo <- new("TestClass", anumeric=1000)
return(pippo)
}
pippo <- myConstructor2()
Error in validObject(.Object) :
invalid class “TestClass” object: invalid object for slot "lmOutput" in class "TestClass": got class "S4", should be or extend class "nls.lm"
Es scheint, dass, wenn ich in neuen einige Slots INIT wollen, dies schaffen Problem mit einem S3-Klasse-Slot?
Gibt es Hinweise, wie Sie dieses Problem vermeiden können?
Dank
Danke für die schnelle Antwort. Nur in meinem "echten" Code implementiert. Objekt ist jetzt gültig! – tucano