重载+运算符并避免不兼容

时间:2015-01-13 05:11:53

标签: r

我试图超载+运算符并遇到不兼容问题。即使+是一个S3泛型函数,它似乎也会查看两个参数(类似于多个调度)而不仅仅是左边的参数,就像其他S3泛型函数一样(参见组"运算"在{{3} })。因此,如果为参数定义了两个不同的+函数,则R发出警告并回退到+两个数值。

以下是一个例子:

myType1 <- function(obj) {
  structure(obj, class = "myType1")
} # function myType1

`+.myType1` <- function(obj1, obj2) {
  return(obj1)
} # function +.myType1

myType2 <- function(obj) {
  structure(obj, class = "myType2")
} # function myType2

`+.myType2` <- function(obj1, obj2) {
  return(obj2)
} # function +.myType2

myType1("A") + 1 # this works, use defined types seem to have precedence
myType1("A") + myType2(1) # this doesn't

有没有办法解决这个问题?我知道S4方法支持多个调度。使用S4会帮助我避免这个问题,即使为其中一个参数定义了一个S3 +方法吗?

提前非常感谢你。

此致 Junghoon Lee

0 个答案:

没有答案