On Mon, Mar 17, 2014 at 4:08 AM, David Winsemius <dwinsemius@comcast.net>wrote:

> S3 classes only dispatch on the basis of the first parameter class.


A minor distinction: S3 classes only dispatch on the basis on *one* of the
parameters. The person who writes the generic gets to choose, and for
predict() it is the first parameter, but it doesn't have to be for other
generics.

In model-fitting functions you often have formula= as the first argument
and data= as the second, and it makes much more sense to dispatch on data=
than on formula=.

The first well-known example is probably MASS::loglm, used in "S
Programming" to illustrate this issue but most of the methods in my survey
package also dispatch based on the second argument.




> That was one of the reasons for the development of S4-classed objects. You
> say you have the expectation that the object is of a class that has an
> ordinary `predict` method presumably S3 in character,  so you probably need
> to write a function that will mask the existing method.



Or write an S4 method for predict and use setGeneric(). That's also not
perfect: if everyone did it there would be lots of competing S4 generics
with the same name, and too many people would have to understand how they
are scoped.



   -thomas


-- 
Thomas Lumley
Professor of Biostatistics
University of Auckland

	[[alternative HTML version deleted]]


