# [R] how to "multiply" list of matrices by list of vectors

Rolf Turner rolf.turner at xtra.co.nz
Wed Feb 6 08:04:20 CET 2013

```Try:

n <- length(mlist)
result <- lapply(1:n,function(i,m,v){m[[i]]%*%v[[i]]},m=mlist,v=vlist)

These days the use of lapply is unlikely to be much, if at all, faster than
the use of a for loop.

cheers,

Rolf Turner

On 02/06/2013 06:50 PM, David Romano wrote:
> Hi everyone,
>
> I'd like to be able to apply lda to each 2D matrix slice of a 3D array, and
> then use the scalings to obtain the corresponding lda scores.
>
> I can use 'apply' to get a list of the lda output for each 2D slice, and
> can create a list of the resulting scalings, but I'm not sure how to
> multiply them in a vectorized way.
>
>
> Here's how I made a list of 2D matrices (suggestion on improving this would
> be welcome, too!):
>
>> aa <- array(1:24,c(4,2,3))
>> mlist <- apply(aa,2,list)
>> mlist <- lapply(mlist, unlist)
>> mlist <- lapply(mlist, function(x) matrix(x,4,2))
> and here's how I made a list of vectors:
>
>> mm <- matrix(1:6,2,3)
>> vlist <- apply(mm, list)
>> vlist <- lapply(vlist, unlist)
> Now I'd like to make the list whose i-th element is mlist[[i]]%*%vlist[[i]]
> without having to loop through the indices.
>
> Any help would be appreciated!

```