I'm trying to create a formal class that does the following:

1) accept objects of arbitrary class as .Data slot

2) provide a set of other slots that are of fixed type (as usual)

The following two approaches came to my mind:

A)

setClass("myclass", representation("ANY", x = "numeric", y 
="numeric"))

new("myclass", 1:10)            # works 
new("myclass", "Test")          # works
new("myclass", factor(1:10))    # fails

While I'm able to specify any object that has a formal class as data part 
it won't work with factors or other non-formal classes.

B)

Since it is sufficient to use anything that inherits from "vector" and 
"factor", I also tried the following one which seems to be cleaner than 
using "ANY" directly.

setClassUnion("myunion", representation("vector", "factor"))    # 
works
setClass("myclass", representation("myunion", x="numeric", 
y="numeric"))

new("myclass", 1:10)            # fails

Now it isn't possible to assign anything as data part at all, as long as 
the union contains any non-formal classes such as "factor". Replacing 
"factor" with a formal class will do, of course.

I wonder if there is some way that does the trick because other 
approaches aren't very straightforward. The obvious solution would be 
a list as .Data part which can store anything but that isn't easy to 
maintain. My goal is to have a formal class whose objects (i.e. .Data 
part) can either be anything derived from "vector" or a factor (ordered). 
I already played around with setIs() for implicit coercion but that doesn't 
do anything as long as one of the classes is an S3 class.

Thanks for your help,

Torsten

______________________________________________
[EMAIL PROTECTED] mailing list
https://www.stat.math.ethz.ch/mailman/listinfo/r-help
PLEASE do read the posting guide! http://www.R-project.org/posting-guide.html

Reply via email to