重载S3泛型加法和乘法功能

时间:2017-03-14 14:25:44

标签: r

我正在尝试重载通用S3添加函数+并乘以函数*

到目前为止,我设法重载了所有Ops(操作符)函数。

foo <- structure(list(value = 1, txt = 'a'), class = 'foo')

Ops.foo <- function(e1,e2){
  structure(list(value = e1$value * e2$value,
                 txt = paste(e1$txt, e2$txt)),
            class = 'foo')
}
foo + foo # value = 1, txt = "a a"

但是,我找不到如何为multiply(*)运算符的add(+)单独执行此操作。我希望行为有所不同,具体取决于我是否添加或增加了我的新类。

我已经尝试过以下方法:

+.foo <- function(e1,e2){
      structure(list(value = e1$value * e2$value,
                     txt = paste(e1$txt, e2$txt)),
                class = 'foo')
}

这给了我一个错误,说.foo不存在:'错误+ .foo&lt; - 函数(e1,e2){:object'.foo'not found'

我也试过UseMethod(),但这似乎只适用于S4类。

如何重载这些特定的(+,*)通用S3函数?

1 个答案:

答案 0 :(得分:4)

你去吧

foo <- structure(list(value = 1, txt = 'a'), class = 'foo')
`+.foo` <- function(leftfoo, rightfoo) { return (paste(leftfoo$txt, rightfoo$txt)) }

并运行它会产生

> foo + foo
[1] "a a"