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([EMAIL PROTECTED])})
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 [EMAIL PROTECTED] http://www.stat.ucl.ac.be/ISpersonnel/lecoutre
If the statistics are boring, then you've got the wrong numbers. -Edward Tufte
______________________________________________ [EMAIL PROTECTED] mailing list https://stat.ethz.ch/mailman/listinfo/r-devel