Hi all, Any ideas about this? As far as I can tell it should work - and I don't understand why it's ok when run outside of a package.
Hadley On Wed, Jun 13, 2012 at 7:41 PM, Winston Chang <winstoncha...@gmail.com> wrote: > I'm trying to overload an operator, and I'm running into a strange problem. > It happens when I install and load the package, but not when I simply > source() the code. > > I'm defining + for two classes. The R code looks like this: > #' @export > #' @method "+" a > `+.a` <- function (x1, x2) { > message("Running custom + function") > } > > #' @export > #' @method "+" b > `+.b` <- `+.a` > > In some cases I do a+b, and in other cases, I do b+b. I'm told that the +.a > and +.b functions must be identical to avoid the error about "Incompatible > methods". (In the actual code, the overloaded + function checks the classes > of x1 and x2, and then sends them off to other functions.) > > This is the NAMESPACE file: > S3method("+",a) > S3method("+",b) > > I've put the code up at https://github.com/wch/badadd. > > > > If I just cut and paste the function definitions to my R session, it works > fine: > x + y > # Running + function > # NULL > > > However, if I install and load the package, it gives a warning about > incompatible methods, and then seems to fall back to the arithmetic + > operator: > library(badadd) > x + y > # [1] 3 > # attr(,"class") > # [1] "a" > # Warning message: > # Incompatible methods ("+.a", "+.b") for "+" > > > Is this expected behavior? And if so, is there a workaround? > -Winston > > [[alternative HTML version deleted]] > > ______________________________________________ > R-devel@r-project.org mailing list > https://stat.ethz.ch/mailman/listinfo/r-devel -- Assistant Professor / Dobelman Family Junior Chair Department of Statistics / Rice University http://had.co.nz/ ______________________________________________ R-devel@r-project.org mailing list https://stat.ethz.ch/mailman/listinfo/r-devel