R Version:Sử dụng S3 lớp ảo như khe của một lớp S4, đã nhận lỗi: có lớp "S4", nên hay mở rộng lớp "nls.lm"
R version 2.15.2 (2012-10-26)
Platform: x86_64-apple-darwin9.8.0/x86_64 (64-bit)
Tôi muốn làm một lớp S4 sử dụng các đối tượng đầu ra của hàm của nls.lm (gói: minpack.lm) như là một khe:
setOldClass("nls.lm")
setClass (
Class="TestClass",
representation=representation(
lmOutput = "nls.lm",
anumeric = "numeric"
)
)
Bây giờ, nếu tôi muốn gọi lớp này trong một "chức năng constructor" tôi có thể làm điều gì đó như này (đúng?):
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)
Và đối tượng "pippo" dường như được khởi tạo đúng cách.
Nếu tôi sử dụng mã này thay vào đó tôi đã nhận ra lỗi:
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"
Có vẻ rằng nếu tôi muốn init trong mới một số khe cắm, điều này tạo ra vấn đề với một khe cắm S3 Class?
Bất kỳ đầu mối nào về cách tránh sự cố này?
Cảm ơn
cảm ơn cho câu trả lời nhanh chóng. Chỉ cần triển khai trong mã "thực" của tôi. Đối tượng là hợp lệ ngay bây giờ! – tucano