# [R] Programming tip: Operators "+.", ".+"

(Ted Harding) Ted.Harding at nessie.mcc.ac.uk
Wed Jul 9 01:49:36 CEST 2003

```Since I have devised the following, they may be thought useful
for that secret crock of gold at the end of the rainbow (WHERE
is it??) full of people's programming tips.

"%+.%"<-function(X,x){sweep(X,1,x,"+")}

"%.+%"<-function(X,x){sweep(X,2,x,"+")}

X %+.% x adds a vector x to each of the columns of the matrix X
with x recycled down columns if length(x) != nrow(X)

X %+.% x adds a vector x to each of the rows of the matrix X
with x recycled along rows if length(x) != ncol(X)

Although "X+x" will work down columns, and "t(t(X)+x)" will work
along rows, it is handy to have a consistent (and mnemonic) notation;
and, in any case, neither of these will work if x is a kx1 or 1xk
matrix rather than a vector or a list c(x1,...,xk). The above will
work in all cases, and also X%+.%x = X%+.%t(x), X%.+%x = X%.+%t(x).

Example:
> S
[,1] [,2] [,3]
[1,]  1.0  0.6  0.3
[2,]  0.6  1.0  0.6
[3,]  0.3  0.6  1.0
> x
 0 1 2
> S%+.%x
[,1] [,2] [,3]
[1,]  1.0  0.6  0.3
[2,]  1.6  2.0  1.6
[3,]  2.3  2.6  3.0
> S%.+%x
[,1] [,2] [,3]
[1,]  1.0  1.6  2.3
[2,]  0.6  2.0  2.6
[3,]  0.3  1.6  3.0

Anyway,crock of gold or not, somebody may find them useful.
Best wishes to all,
Ted.

--------------------------------------------------------------------
E-Mail: (Ted Harding) <Ted.Harding at nessie.mcc.ac.uk>
Fax-to-email: +44 (0)870 167 1972
Date: 09-Jul-03                                       Time: 00:49:36
------------------------------ XFMail ------------------------------

```