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