At 01:39 pm -0500 31/03/04, Raubertas, Richard wrote:
Another alternative is to use the underappreciated function
'sweep()':

sweep(A, 1:2, a, "+")


I find the following helpful (it's not due to me but I cannot find the original poster):



 "%.+%" <- function(a,x){sweep(a , 2:1 , x ,"+" )}
 "%+.%" <- function(a,x){sweep(a , 1:2 , x ,"+" )}

 A <- matrix(1:16,4,4)
 x <- 10^(0:3)

A %+.% x
     [,1] [,2] [,3] [,4]
[1,]    2    6   10   14
[2,]   12   16   20   24
[3,]  103  107  111  115
[4,] 1004 1008 1012 1016
A %.+% x
     [,1] [,2] [,3] [,4]
[1,]    2   15  109 1013
[2,]    3   16  110 1014
[3,]    4   17  111 1015
[4,]    5   18  112 1016



For 3d arrays this generalizes to

 "%+..%" <- function(a,x){sweep(a , 1 , x ,"+" )}
 "%.+.%" <- function(a,x){sweep(a , 2 , x ,"+" )}
 "%..+%" <- function(a,x){sweep(a , 3 , x ,"+" )}

Then if A <- array(1:8,rep(2,3)) and x <- c(10,100)

A %+..% x et seq give you a consistent method for addition.


-- Robin Hankin Uncertainty Analyst Southampton Oceanography Centre SO14 3ZH tel +44(0)23-8059-7743 [EMAIL PROTECTED] (edit in obvious way; spam precaution)

______________________________________________
[EMAIL PROTECTED] mailing list
https://www.stat.math.ethz.ch/mailman/listinfo/r-help
PLEASE do read the posting guide! http://www.R-project.org/posting-guide.html

Reply via email to