hadley wickham wrote: > On Thu, Jul 10, 2008 at 5:09 AM, Peter Dalgaard > <[EMAIL PROTECTED]> wrote: > >> Tine wrote: >> >>> Hi! >>> >>> I was just wondering is there anyway to overload operator for custom >>> class. >>> For example: >>> I have two matrices A and B with same dimensions. I want to overload >>> operator '+' with my own function. >>> Or even better can I create my own (new) operator. >>> Example: >>> A+-B where '+-' would be some function. >>> >>> >> You can define an S3 method >> >> "+.myclass" <- function(a,b) {...} >> >> Notice that dispatch is only on the 1st argument. This is a generic >> weakness of S3 methods. The Matrix package implements similar things >> with S4 methods, but it does tend to get rather complicated. >> > > That's not completely true is it? > > >> 2 * unit(2, "cm") >> > [1] 2*2cm > >> unit(2, "cm") * 2 >> > [1] 2*2cm > > (But I'm not sure why that works) > Group generics. Yes, I forgot about those. They dispatch on _any_ argument being of a given class. The problem is that it is a single dispatch, which is why R gets itself in a twist when you try to add Dates and difftimes:
> as.Date("2008-7-10")+as.difftime(2,units="days") [1] "2008-07-12" Warning message: Incompatible methods ("+.Date", "Ops.difftime") for "+" > as.difftime(2,units="days")+as.Date("2008-7-10") Time difference of 14072 days Warning message: Incompatible methods ("Ops.difftime", "+.Date") for "+" -- O__ ---- Peter Dalgaard Ă˜ster Farimagsgade 5, Entr.B c/ /'_ --- Dept. of Biostatistics PO Box 2099, 1014 Cph. K (*) \(*) -- University of Copenhagen Denmark Ph: (+45) 35327918 ~~~~~~~~~~ - ([EMAIL PROTECTED]) FAX: (+45) 35327907 ______________________________________________ R-help@r-project.org mailing list https://stat.ethz.ch/mailman/listinfo/r-help PLEASE do read the posting guide http://www.R-project.org/posting-guide.html and provide commented, minimal, self-contained, reproducible code.