Thanks for this Duncan >>
>> Why is Peter Dalgaard's suggestion necessary? Why can't "+" >> take more than two arguments? > > One reason is that it's a binary operator, so that's all it needs to > take. We have the sum function for multiple operands. > > I would guess the historical reason is so that it can share code with > other binary operators. For example, + currently shares code with the > other binary operators -, *, /, ^, %%, %/%, but the grouping needed > varies between them: a-b-c == (a-b)-c, but a^b^c == a^(b^c). R lets > the parser handle operator binding. > OK, I see. But in algebra the "+" symbol is special: it is reserved exclusively for associative and commutative operations [thus a+b+c is always well-defined]; perhaps the parser could fall in with this convention? > By the way, another complaint is that sum() is supposed to be generic, > but you can't define a sum.matrix() method so that sum(a,b,c) does the > same as a+b+c when a is a matrix. (This would probably be a bad idea > because people may be relying on the current behaviour, but R tries > not > to prevent people from testing out bad ideas.) ... Can just clarify this? I can see that it's a bad idea, but I don't quite see why one *can't* do it. sum() is generic, and the manpage says that methods can be defined for it directly. OK, so I define a function sum.matrix() [for the moment just taking two arguments]: R> sum.matrix <- function(a,b){matrix(apply(matrix(c(a,b),ncol=2), 1,sum),dim(a))} R> a <- matrix(1:6,2,3) R> sum(a,a) [1] 42 R> sum.matrix(a,a) [,1] [,2] [,3] [1,] 2 6 10 [2,] 4 8 12 R> So why doesn't sum(a,a) dispatch to sum.matrix()? best wishes rksh > You need to apply your > own class to the matrices (e.g. mymatrix), then it all works: >> f <- function(i){m <- matrix((1:6)^i,2,3); class(m) <- >> "mymatrix"; m} >> >> sum.mymatrix <- function(...) { > + x <- list(...) > + return(x[[1]] + do.call(sum, x[-1])) > + } >> >> do.call("sum",sapply(1:4,f,simplify=FALSE)) > [,1] [,2] [,3] > [1,] 4 120 780 > [2,] 30 340 1554 > attr(,"class") > [1] "mymatrix" > > Duncan Murdoch > > ______________________________________________ > R-help@stat.math.ethz.ch 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. -- Robin Hankin Uncertainty Analyst National Oceanography Centre, Southampton European Way, Southampton SO14 3ZH, UK tel 023-8059-7743 ______________________________________________ R-help@stat.math.ethz.ch 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.