From Matthias.Kohl at uni-bayreuth.de  Wed Sep 22 10:52:03 2004
From: Matthias.Kohl at uni-bayreuth.de (Matthias.Kohl@uni-bayreuth.de)
Date: Wed Sep 22 10:52:08 2004
Subject: [Rd] S4 methods and polymorophism
In-Reply-To: <200409221037250788.0078AC6D@mail.math.fu-berlin.de>
References: <6.0.1.1.2.20040922095129.02d97608@stat4ux.stat.ucl.ac.be>
	<200409221037250788.0078AC6D@mail.math.fu-berlin.de>
Message-ID: <1124.132.180.246.60.1095843123.squirrel@mail.uni-bayreuth.de>

I think, it must be x instead of object?

setMethod("length", signature(x="Collection"), function(x) length(x@ID))

> 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
>
> ______________________________________________
> R-devel@stat.math.ethz.ch mailing list
> https://stat.ethz.ch/mailman/listinfo/r-devel


[Rd] S4 methods and polymorophism
Matthias.Kohl@uni-bayreuth.de