我正在尝试重载通用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函数?
答案 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"