[Rd] S4 class slot name 'names' is not allowed (PR#8767)

From: <maechler_at_stat.math.ethz.ch>
Date: Thu 13 Apr 2006 - 07:11:08 GMT


>>>>> "SteveL" == Steven Lacey <slacey@umich.edu>
>>>>> on Wed, 12 Apr 2006 19:06:52 -0400 writes:

    SteveL> Hi, Why doesn't this work?  

    setClass("tests", representation(names = "character"))     tmp <- new("tests"); tmp@names <- "a"  

    SteveL> Error in "slot<-"(object, name, TRUE, value) :     SteveL> 'names' attribute [1] must be the same length as the vector [0]  

    SteveL> Why does this work (replace names with name)?  

    setClass("test", representation(name="character"))     tmp <- new("test"); tmp@name <- "a"  

    SteveL> I looked at the help for setClass, representation,
    SteveL> and slot and found no restriction on the slot names
    SteveL> other than that they "be any non-empty string, but
    SteveL> if the name is not made up of letters, numbers, and
    SteveL> '"."', it needs to be quoted".
 

Hah, you got us!
This *is* a bug - at least in the documentation ===> This goes to R-bugs as well.

It's because of the current *implementation* of S4-classed objects in R [as an empty list with a list of unusual attributes] -- and because 'names' (and also, e.g., 'dimnames') are attributes in R with a very special treatment - in many places.

I haven't delved into the internal code, but I know that this problem will go away ``as soon as'' the internal representation of S4-classed objects is replaced -- something that has been planned for a while and "just did not yet happen".

Martin Maechler, ETH Zurich



R-devel@r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-devel Received on Thu Apr 13 17:45:54 2006

This archive was generated by hypermail 2.1.8 : Thu 13 Apr 2006 - 10:17:04 GMT