Prof Brian Ripley wrote: > On Mon, 21 Aug 2006, Seth Falcon wrote: > >> John Chambers <[EMAIL PROTECTED]> writes: >> >>> When I was introducing the special type for S4 objects, my first >>> inclination was to have length(x) for those objects be either NA or an >>> error, along the lines that intuitively length(x) means "the number of >>> elements in the vector-style object x". However, that change quickly >>> was demonstrated to need MANY revisions to the current code. >> Perhaps some details on the required changes will help me see the >> light, but I would really like to see length(foo) be an error (no such >> method) when foo is an arbitary S4 class. > > According to the Blue Book p.96 every S object has a length and 'An > Introduction to R' repeats this. So I believe an error is not an option. > Indeed, from the wording, I think code could legitimately assume length(x) > works and 0 <= length(x) and it is an integer (but not necessarily of type > 'integer'). > > Certainly functions and formulae have a length (different for functions in > S and R, as I recall), and they are not 'vector-style'.
Yes, but that is because that in S(-Plus), and not in R, virtually every object was an instance of a "generic vector", including functions (formulas were white book, not blue, and I'm still not sure that indexing of them makes sense, but I am sure that indexing functions does not; it suggests, at least to me, that we want to emphasize implementation over semantics). Now, in R, since not everything is a generic vector, it is less clear what to do in some cases, and I am not going to argue too hard against everything having a length, but I think the number 1 is a much better choice than the number 0. (the compromise solution of 0.5 has some charm :-) I am also scared that such reasoning will lead one to believe that indexing these things using [, or similar should work, and that leads to major problems, since I lost the argument about not indexing outside of array bounds some years ago. What would be sensible in that case? Certainly not what currently happens with S4 objects (in R release). best wishes Robert > >> I have encountered bugs due to accidental dispatch -- functions >> returning something other than an error because of the zero-length >> list implementation of S4. It would not be surprising if some of the >> breakage caused by removing this "feature" identifies real bugs. >> >> I was thinking that one of the main advatnages of the new S4 type was >> to get away from this sort of accidental dispatch. Not trying to be >> snide, but what is useful about getting a zero for length(foo)? The >> main use I can think of is in trying to identify S4 instances, but >> happily, that is no longer needed. >> >> + seth > -- Robert Gentleman, PhD Program in Computational Biology Division of Public Health Sciences Fred Hutchinson Cancer Research Center 1100 Fairview Ave. N, M2-B876 PO Box 19024 Seattle, Washington 98109-1024 206-667-7700 [EMAIL PROTECTED] ______________________________________________ R-devel@r-project.org mailing list https://stat.ethz.ch/mailman/listinfo/r-devel