其实'+'运算也是个泛函数。直接看例子:
<br />
methods('+')<br />
## +.Date +.POSIXt</p>
<p>## S3 method for data.frame class<br />
'+.data.frame' = function(x, y){<br />
if (inherits(x, "data.frame") && inherits(y, "data.frame"))<br />
z = cbind(x,y)<br />
z<br />
}</p>
<p>x=data.frame(x=1:5, y =1:5)<br />
y = data.frame(z=letters[1:5])<br />
x+y</p>
<p>## S3 method for a general class<br />
'+.aa' = function(x, y){<br />
if (inherits(x, "aa") && inherits(y, "aa"))<br />
z = paste0(x,y)<br />
}<br />
x="a"<br />
y="b"<br />
class(x)="aa"<br />
class(y)="aa"<br />
x+y<br />
## [1] "ab"</p>
<p>## S3 method for character class<br />
'+.character' = function(x, y){<br />
if (inherits(x, "character") && inherits(y, "character"))<br />
z = paste0(x,y)<br />
z<br />
}</p>
<p>"a" + "b"<br />
# Error in "a" + "b" : non-numeric argument to binary operator<br />
奇怪的是不能对character类型定义泛函数,这是为什么呢。。见楼下大神解答:[s:11]
(所有的 ' 号都应变成 ` 号,代码插件问题,显示不正常)
</p>