>>>>> Hadley Wickham <h.wick...@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 ______________________________________________ R-devel@r-project.org mailing list https://stat.ethz.ch/mailman/listinfo/r-devel