[R] Applying a function to a matrix using indexes as arguments

David Winsemius dwinsemius at comcast.net
Thu Dec 17 02:34:01 CET 2015


> On Dec 16, 2015, at 4:18 PM, Matteo Richiardi <matteo.richiardi at gmail.com> wrote:
> 
> I have to evolve each element of a matrix W
> 
> W <- matrix(0,2,3)
> 
> according to some function which uses the indices of the matrix [i,j] as
> arguments:
> w.fun = function(i,j) {
>  return A[i]*B[j]/(C[i,j])
> }
> 
> where
> A<-c(100,100)
> B<-c(200,200,200)
> C <- matrix( rnorm(6,mean=0,sd=1), 2, 3)
> 
> How can I do it, without recurring to a loop? Also, in my application I
> need to pass the function another argument.

mapply( function( i,j,fac) {fac*A[i]*B[j]/C[i,j]},
         i=row(W), 
         j=col(W),
         MoreArgs=list(fac=10) )
[1]  -86207.97  325768.16 -135764.41 -913036.95 -142509.39
[6]  243715.67


N.B. all of the *apply functions are really loops.

-- 
David.
> 
> Thanks a lot for your suggestions.
> Matteo
> 
> 	[[alternative HTML version deleted]]
> 
> ______________________________________________
> R-help at r-project.org mailing list -- To UNSUBSCRIBE and more, see
> 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.

David Winsemius
Alameda, CA, USA



More information about the R-help mailing list