>>>>> "JMC" == John Chambers <[EMAIL PROTECTED]> >>>>> on Sun, 20 Aug 2006 20:20:45 -0400 writes:
JMC> When I was introducing the special type for S4 objects, JMC> my first inclination was to have length(x) for those JMC> objects be either NA or an error, along the lines that JMC> intuitively length(x) means "the number of elements in JMC> the vector-style object x". However, that change JMC> quickly was demonstrated to need MANY revisions to the JMC> current code. JMC> As a compromise, my preference would be that S4 objects JMC> have length 0. That was true before the S4 type was JMC> introduced, and if memory serves, that was what we JMC> expected in early S for objects that were not vectors. JMC> Maybe we can try that out, at least for 2.4.1. That would look more sensible to me as well. Of course this only applies to S4 objects that are not of an S4 class which has an own length() method. BTW, Martin Morgan's original example now "works" in R-devel, since the (unconditional availability of the) new 'S4' type has allowed to logically simplify str() there. "works" in double quotes because the prototype part does not yet really look nice.. JMC> But as often happens, we have to deal with the fact JMC> that R has many authors. That's usually a good thing, JMC> but it does mean that different corners of the code JMC> will be locally sensible, but not globally consistent. (nice saying; I like the wording ..) JMC> (Having just spent the best part of a day "debugging" a JMC> problem that turned out to be the result of an S3 JMC> method for trunc() in base that ignored the documented JMC> number of arguments, the inconsistencies are on my mind JMC> at the moment.) (I'm interested in the details, if you can say a bit more; maybe these are not relevant for R-devel ..) JMC> Martin Maechler wrote: >>>>>>> "Seth" == Seth Falcon <[EMAIL PROTECTED]> on Fri, 18 >>>>>>> Aug 2006 09:54:54 -0700 writes: >>>>>>> >> Seth> Martin Maechler <[EMAIL PROTECTED]> writes: >> >> I agree you've found an "infelicity" in the current >> setup, >> since >> >> >> >> > setClass("A", representation(x="numeric")) >> [1] >> "A" >> > getClass("A")@prototype >> <S4 Type Object> >> >> attr(,"x") >> numeric(0) >> > >> length(getClass("A")@prototype) >> [1] 1 >> > >> getClass("A")@prototype[1] >> Error in >> getClass("A")@prototype[1] : object is not subsettable >> >> > >> >> >> >> It's not clear yet to me *what* should be changed. >> >> For my taste, if length(object) returns 1, >> I'd >> typically want that object[1] should be valid; >> but I >> think we already have some (peculiar) exceptions to that >> >> rule. >> Seth> I disagree with the notion that length and "[" should Seth> be tightly coupled. An object having length doesn't Seth> have to mean that subsetting makes any sense. For Seth> example, an environment has length, but what should Seth> env1[1] return? And with S4 classes, there are many Seth> such examples where "[i]" won't make sense. >> You are right. I was rather thinking of "basic" objects >> rather than highly structured objects such as S4 classes. >> >> Note that for me, an environment belongs into the >> category of "peculiar" exceptions ;-) >> >> Martin >> Seth> + seth ______________________________________________ R-devel@r-project.org mailing list https://stat.ethz.ch/mailman/listinfo/r-devel