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]]
______________________________________________
[email protected] mailing list
https://stat.ethz.ch/mailman/listinfo/r-devel