# [R] Another loop avoidance question.

From: David <dpleydel_at_univ-fcomte.fr>
Date: Wed, 27 Jun 2007 14:29:13 +0200

Hi

I want to sum over one of the dimensions of a n x k1 x k2 array in which each column is the product of the corresponding columns from two matrices with dimensions n x k1 and n x k2. I can see two approaches: a loop on k1 and a loop on k2. But I cannot figure a solution that avoids the loop? Is it possible? (I don't refer to apply or lapply etc either as they are just hidden loops so, correct me if I'm wrong, I can't see they hold any real advantage here). The following does exactly what I want (except for the loops). My aim is to find the solution which minimises processing time.

cheers
Dave

## Basic paramters

k1=3
k2=2
n=10
m1 = matrix (1:(n*k1), nrow=n, ncol=k1)
m2 = matrix (1:(n*k2), nrow=n, ncol=k2)
## Approach 1: loop on k1

output1 = matrix(0,nrow=n,ncol=k2)
pt1 = proc.time(for (i in 1:k1) output1 = output1 + m1[,i]*m2)
## Approach 2: loop on k2

output2 = matrix(0,nrow=n,ncol=k2)
pt2 = proc.time(for (i in 1:k2) output2[,i] = rowSums( m1*m2[,i] ))
## Same result

sum(output1-output2)

```--
David Pleydell

Laboratoire de Biologie Environnementale
USC INRA-EA 3184
Université de Franche-Comté
Place Leclerc F
25030
Besançon
France

(0033) 0381665763
dpleydel_at_univ-fcomte.fr

______________________________________________
R-help_at_stat.math.ethz.ch mailing list
https://stat.ethz.ch/mailman/listinfo/r-help