From wolski at molgen.mpg.de  Wed Sep 22 10:37:25 2004
From: wolski at molgen.mpg.de (Wolski)
Date: Wed Sep 22 10:37:32 2004
Subject: [Rd] S4 methods and polymorophism
In-Reply-To: <6.0.1.1.2.20040922095129.02d97608@stat4ux.stat.ucl.ac.be>
References: <6.0.1.1.2.20040922095129.02d97608@stat4ux.stat.ucl.ac.be>
Message-ID: <200409221037250788.0078AC6D@mail.math.fu-berlin.de>

Hi!
Have you tried ?

setMethod("length",signature(object="Collection"),function(object){ length(object@ID)})
                            ???????????
And I would use R.2.0 instead of R.1.9

/E


*********** REPLY SEPARATOR  ***********

On 9/22/2004 at 10:21 AM Eric Lecoutre wrote:

>>>Hello R Power Users,
>>>
>>>There is a rather large introduction you may skip to go directly to 
>>>my  question about S4 classes.
>>>
>>>I am working on some toy code to help me get in through S4 classes.
>>>Doing this homework, I have some questions about S4 classes. I have 
>>>carefully read available help and some additional material such as
>>>Robert 
>>>Gentleman's slides and special attention to "Programming with Data".
>>>
>>>I am working with R 1.9 on Windows.
>>>
>>>Final goal is the complete rewriting of my R2HTML package from scratch
>>>to 
>>>provide to users a convenient way to describe their output and to allow 
>>>different output format (provided by special functions - drivers, "? la" 
>>>Sweave - HTML, LaTeX, XML...).
>>>
>>>As BillGates guys often have good ideas (or find or buy them), I take
>>>the 
>>>structure of Word documents as a starting point.
>>>
>>>A document will be a collection of Objects, which will be either a
>>>standard 
>>>R object or a graph, in both cases with some Formatting Options (FO)
>>>added. 
>>>Formatting Options (a class) is a list of named components like
>>>(font-size: 
>>>16, forecolor: darkred).
>>>
>>>Here is what I have for the moment:
>>>
>>> > setClassUnion("ROMA_ID", c("NULL","character"))
>>> > setClass("Objects",representation("list",ID="ROMA_ID"))
>>>
>>>ie: Objects is a list (there will be objects of class "Object" without
>>>"s") 
>>>and ID provided to all objects.
>>>
>>>Then, as I will manipulate several such collections, such as Documents, 
>>>Graphs, and so on, I define the virtual class Collection. At the moment:
>>>
>>> > setClassUnion("Collection",c("Objects","Documents","Graphs"))
>>>
>>>Then, I follow Chambers's samples to add some functionality such as
>>>show() 
>>>functions and manipulations. A "+" method applied on two "Object"
>>>creates a 
>>>new Objects collection.
>>>
>>>As you can see from this output, both the definition of the mehod for
>>>"+" 
>>>and for "show" are correct:
>>>
>>>
>>>---------- output ---------------
>>> > Object(1)+Object("Oui")
>>><ROMA> Collection of Objects: 2 objects.
>>>
>>>ID:  numeric
>>>         <ROMA> Object
>>>         Classe: numeric
>>>         FO:  alignment
>>>
>>>ID:  character
>>>         <ROMA> Object
>>>         Classe: character
>>>         FO:  font;fontsize;fontcolor;alignment
>>>---------- output ---------------
>>>
>>>
>>>
>>>I have succedded adding a method to generic "+" operator, which is 
>>>initially defined as:
>>>
>>> > getMethod("+")
>>>.Primitive("+")
>>>
>>>As I understand it, the fact that it is a .Primitive call ensures the 
>>>default method for any extendion (that is: we can add methods).
>>>
>>>Now, I try to add a method for length to handle "Collection" classes.
>>>
>>> > getMethod("length")
>>>.Primitive("length")
>>>
>>>
>>>*** QUESTION:
>>>
>>>
>>>I dont undertand the following error message when trying to define this
>>>method:
>>>
>>> > setMethod("length","Collection",function(object){ length(object@ID)})
>>>Error in conformMethod(signature, mnames, fnames, f) :
>>>         In method for function "length": Formal arguments omitted in
>>>the 
>>>method definition cannot be in the signature (x = "Collection")
>>>
>>>How is it possible to extend length to my own class?
>>>
>>>
>>>
>>>Be HappyR and HappyR again,
>>>
>>>Eric
>>>
>>>Eric Lecoutre
>>>UCL /  Institut de Statistique
>>>Voie du Roman Pays, 20
>>>1348 Louvain-la-Neuve
>>>Belgium
>>>
>>>tel: (+32)(0)10473050
>>>lecoutre@stat.ucl.ac.be
>>>http://www.stat.ucl.ac.be/ISpersonnel/lecoutre
>>>
>>>If the statistics are boring, then you've got the wrong numbers. -Edward 
>>>Tufte
>>>
>>>______________________________________________
>>>R-devel@stat.math.ethz.ch mailing list
>>>https://stat.ethz.ch/mailman/listinfo/r-devel



Dipl. bio-chem. Witold Eryk Wolski             @         MPI-Moleculare Genetic   
Ihnestrasse 63-73 14195 Berlin                'v'    
tel: 0049-30-83875219                        /   \       
mail: witek96@users.sourceforge.net        ---W-W----    http://www.molgen.mpg.de/~wolski 
      wolski@molgen.mpg.de


[Rd] S4 methods and polymorophism
Wolski