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