From davide.rambaldi at ieo.eu  Wed Dec 12 14:51:33 2012
From: davide.rambaldi at ieo.eu (Davide Rambaldi)
Date: Wed, 12 Dec 2012 14:51:33 +0100
Subject: [Rd] Lost in S4 and S3 classes
Message-ID: <D5F5DD5E-9BA1-4C15-B943-E6AC21300D4F@ieo.eu>

Hi all, this is my first post in R devel? sorry if I lost some of the guidelines. 

Anyway this is my problem:

Version:

R version 2.15.2 (2012-10-26)
Platform: x86_64-apple-darwin9.8.0/x86_64 (64-bit)

I want to make an S4 class that use the output object of the function of nls.lm as a slot:

setOldClass("nls.lm")

setClass (
  Class="TestClass",
  representation=representation(
      lmOutput = "nls.lm",
      anumeric = "numeric"
    )
  )


Now, if I want to call this class in a "constructor function" I can do something like this (correct?):

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)


And the object "pippo" seems correctly initialized.


If I use this code instead I got an error:

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"


Seems that if I want to INIT in new some slots, this create problem with a S3 Class slot?

Any clue on how to avoid this problem?

Thanks





-----------------------------------------------------------
PLEASE NOTE MY NEW EMAIL ADDRESS
-----------------------------------------------------------

-----------------------------------------------------
Davide Rambaldi, Bioinformatics PhD.
-----------------------------------------------------
IEO ~ MolMed
[e] davide.rambaldi at ieo.eu
[e] davide.rambaldi at gmail.com



[Rd] Lost in S4 and S3 classes
Davide Rambaldi