我正在尝试在R中使用S4类,并尝试为我的对象定义一个加(
现在我可以使用
现在,一元加号当然不起作用,因此必须进行重载。
但是这会生成错误:
+
)运算符,即重载加号运算符。我成功地重载了二元+
,但我无法弄清如何重载一元加运算符。以下是我想要实现的最小工作示例(一元运算符不起作用):setClass("HWtest",
representation(expr = "character"),
prototype = list(expr = NA_character_)
)
H <- new("HWtest", expr="Hello")
W <- new("HWtest", expr="World")
setMethod("+", signature(e1="HWtest", e2="HWtest"),
function(e1,e2){
new("HWtest",
expr = paste(e1@expr," + ",e2@expr))
}
)
现在我可以使用
+
运算符,并且它能够顺利地工作:H+W
An object of class "HWtest"
Slot "expr":
[1] "Hello + World"
现在,一元加号当然不起作用,因此必须进行重载。
+H
Error in +H : invalid argument to unary operator
因此,我尝试以以下方式进行过载:
setMethod("+", signature(e="HWtest"),
function(e){
new("HWtest",
expr = paste("+ ",e@expr))
}
)
但是这会生成错误:
Error in match.call(fun, fcall) :
argument 1 matches multiple formal arguments
能否重载一元加法运算符?如果可以,对于这个最小化的示例,我该如何实现它?