[R] How would you avoid loops in this simple example?

Joshua Wiley jwiley.psych at gmail.com
Sat Mar 19 20:16:19 CET 2011


Hi,

You are basically just doing matrix multiplication, which R has some
built in, optimized functions for.  You can see the documentation at
?matmult
This gets you part of the way there.  I suspect you can even avoid the
last loop if you know enough about linear algebra and how to use some
clever transposition and inner or outer multiplication (?outer ?t
?matmult).

## alternate nu
nu2 <- array(NA,dim=c(N,M,P))
## avoiding much of that loop
for(i in 1:P) {
  nu2[,, i] <- F[, i, drop = FALSE] %*% Lambda[i, ]
}

HTH,

Josh

On Sat, Mar 19, 2011 at 10:27 AM, zerfetzen
<paul.heinrich.dietrich at gmail.com> wrote:
> I'm trying to code more R-like and avoid loops. Here is an example I'm having
> a hard time getting away from loops with, and the real matrices are rather
> large, and the computation is too time-consuming.
>
> ### Dimensions
> N <- 2
> M <- 3
> P <- 4
> ### Array and Matrices
> nu <- array(NA,dim=c(N,M,P))
> Lambda <- matrix(1:12,P,M)
> F <- matrix(1:8,N,P)
> ### Loop to avoid
> for (i in 1:N) {for (m in 1:M) {for (p in 1:P) {
>     nu[i,m,p] <- Lambda[p,m] * F[i,p]
> }}}
>
> Any help is appreciated. Thanks.
>
> --
> View this message in context: http://r.789695.n4.nabble.com/How-would-you-avoid-loops-in-this-simple-example-tp3390017p3390017.html
> Sent from the R help mailing list archive at Nabble.com.
>
> ______________________________________________
> 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.
>



-- 
Joshua Wiley
Ph.D. Student, Health Psychology
University of California, Los Angeles
http://www.joshuawiley.com/



More information about the R-help mailing list