# [R] Help with improving efficiency

John Tillinghast tilling27 at yahoo.com
Sat Aug 10 02:51:14 CEST 2002

```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.

--- Wolfgang Viechtbauer <wviechtb at s.psych.uiuc.edu>
wrote:
> Dear All,
>
> I have a problem that I think could be solved much
> more efficiently, but
> I don't have a clue how to accomplish this. I have a
> matrix W with
> dimensions k*(p+1):
>
> Let's say W is 5*4 and looks like this:
>
> > W
>       [,1] [,2] [,3] [,4]
>  [1,]    1   -1   -1    1
>  [2,]    1    1    1    1
>  [3,]    1    2   -2   -1
>  [4,]    1    0   -1   -1
>  [5,]    1   -2   -1    0
>
> I want to take each row (a p*1 vector), transpose it
> (1*p column
> vector), and then multiply that by the same row
> vector, which will give
> me a p*p matrix. So, for each row, I calculate:
>
> as.matrix(W[i,]) %*% W[i,]	for i = 1, ..., k.
>
> Next, I want to find the sum of the k (p*p)
> matrices. The following code
> seems to work fine:
>
>
> 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
> m1 <- matrix(0, nrow=p+1, ncol=p+1)
> for (i in 1:k) {
>    m1 <- m1 + as.matrix(W[i,]) %*% W[i,]
> }
>
>
> but this just seems terribly inefficient. Any
> suggestions for improving
>
> 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
>
_._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._

__________________________________________________

-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-
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
_._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._

```