Skip to content
Back to formatted view

Raw Message

Message-ID: <Pine.SOL.4.30.0208092026090.6013-100000@s.psych.uiuc.edu>
Date: 2002-08-10T02:45:12Z
From: Wolfgang Viechtbauer
Subject: Help with improving efficiency
In-Reply-To: <20020810005115.51685.qmail@web40404.mail.yahoo.com>

> The "real" answer will tell us something about R
> syntax, arrays, vectorization, etc. I would also love
> to know it.
>
> But as it happens, the function you are describing is
> equal to t(W)%*%W.

I must admit that I completely didn't notice that my code is just a
cumbersome way of calculating the crossproduct of the W matrix (which
could be accomplished even faster with the crossprod() function, as one
person pointed out to me off-line).

However, I guess I should have mentioned that the code within the loop
is just a subset of the operations that are being performed on the row
vectors.

So, for example, let's say that each of the k (p*p) matrices is also
being multiplied by a value v[i]:


k <- 5
p <- 3
W <- matrix(c( rep(1, k), round(rnorm(n=(p*k), mean=0, sd=1), 0)),
     ncol=(p+1), nrow=k)                # create a random W matrix
v  <- rnorm(n=k, mean=0, sd=1)		# create random v values
m1 <- matrix(0, nrow=p+1, ncol=p+1)
for (i in 1:k) {
   m1 <- m1 + v[i] * as.matrix(W[i,]) %*% W[i,]
}


Obviously, this is different from simlpy taking the crossproduct of W.
The best way to optimize the code probably depends on the types of
operations being performed within the loop, but I am hoping to gain a
general idea of how to optimize this particular code and then maybe I
can apply that knowledge to the actual problem I am dealing with (and
the "real" answer, as pointed out, might serve a nice illustration of
how to write efficient code in general).

Wolfgang


-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-
r-help mailing list -- Read http://www.ci.tuwien.ac.at/~hornik/R/R-FAQ.html
Send "info", "help", or "[un]subscribe"
(in the "body", not the subject !)  To: r-help-request at stat.math.ethz.ch
_._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._