If you have lots of memory there is an obvious strategy:
d12 <- prod(dim(A)[1:2])
A <- A * array(rep(B, each = d12), dim = dim(A))
I don't really see much wrong with the obvious for() loop, though:
for(b in 1:length(B)) A[,,b] <- A[,,b] * B[b]
Bill Venables
CSIRO Laboratories
PO Box 120, Cleveland, 4163
AUSTRALIA
Office Phone (email preferred): +61 7 3826 7251
Fax (if absolutely necessary): +61 7 3826 7304
Mobile: +61 4 8819 4402
Home Phone: +61 7 3286 7700
mailto:Bill.Venables at csiro.au
http://www.cmis.csiro.au/bill.venables/
-----Original Message-----
From: r-help-bounces at r-project.org [mailto:r-help-bounces at r-project.org]
On Behalf Of Ingmar Visser
Sent: Thursday, 27 March 2008 7:58 AM
To: R-help at r-project.org
Subject: [R] avoiding loops
Hi,
I need to compute an array from a matrix and an array:
A <- array(1:20,c(2,2,5))
B <- matrix(1:10,5)
And I would like the result to be an array consisting of the following:
rbind(A[1,,1]*B[1,],
A[2,,1]*B[1,])
rbind(A[1,,2]*B[2,],
A[2,,2]*B[2,])
rbind(A[1,,3]*B[2,],
A[2,,3]*B[2,])
etc.
Hence the result should have the same dimension as A, ie a series of
2 by 2 matrices.
Short of a for loop over the the last index of A I have struggled
with versions of apply but
to no avail ...
Any insights much appreciated,
Best, Ingmar
______________________________________________
R-help at 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.