[Rd] str and s3 classes
    Martin Maechler 
    maechler at stat.math.ethz.ch
       
    Fri Jun 21 09:42:11 CEST 2013
    
    
  
>>>>> Hadley Wickham <h.wickham at gmail.com>
>>>>>     on Wed, 19 Jun 2013 15:44:05 -0500 writes:
    > Hi all, Because str uses the generic version of length and
    > names, it's currently very easy to create objects that
    > break str:
    > a <- structure(list(1:5), class = "a") 
    > length.a <- function(x) 2L
    > str(a)
    > b <- structure(list(1:5), class = "b") 
    > names.b <-function(x) character()
    > str(b)
    > These are obvious toy examples, but it is a real problem
    > if you want to create a class that defines names or length
    > in a meaningful way, that is incompatible with the
    > underlying data structure.
Yes indeed, (and "well know").
I'm arguing that in such a situation, i.e.,  where you
explicitly let length() --- or `[` ---  behave incompatibly
with respect to the underlying data structure,
you have to define your own str() S3 method.
I/we have done so ourselves in quite a few cases; 
typically this is a 1- or 2-liner, possibly calling
utils:::str.default(). 
I do actually think we should *un*hide str.default() for such
situations.
In such a case (and not only here), using an S4 class instead of
an S3 is much more natural IMO.
But of course, we can discuss the issue here; that's exactly
what I think R-devel is for.
With regards (also to the Rstudio team),
Martin Maechler,
ETH Zurich
    
    
More information about the R-devel
mailing list