> On Dec 17, 2015, at 8:38 AM, David L Carlson <dcarl...@tamu.edu> wrote: > > Also > > A %*% t(B) / C >
Which would be equivalent to: > outer(A, B)/C [,1] [,2] [,3] [1,] 10863.03 -14390.53 -287691.41 [2,] -127580.06 -13576.77 83597.56 And perhaps even more efficiently: tcrossprod(A,B)/C The OP will need to determine whether the "other argument" he mentioned can be applied to this result in a similarly "vectorized" manner. The reason that I chose `mapply` was that its `MoreArgs`-parameter provided an explicit mechanism for passing a further argument list to the function inside the implicit loop. -- David. > > Which works because when a vector is converted to a matrix, it becomes a > 1-column matrix. The documentation for t() points this out but there is a > typo: > > "When x is a vector, it is treated as a column, i.e., the result is a 1-row > matrix." > > Should be a "1-column matrix" > >> as.matrix(A) > [,1] > [1,] 100 > [2,] 200 > > ------------------------------------- > David L Carlson > Department of Anthropology > Texas A&M University > College Station, TX 77840-4352 > > -----Original Message----- > From: R-help [mailto:r-help-boun...@r-project.org] On Behalf Of Jeff Newmiller > Sent: Wednesday, December 16, 2015 7:01 PM > To: Matteo Richiardi; r-help@r-project.org > Subject: Re: [R] Applying a function to a matrix using indexes as arguments > > Would > > outer( A, B, `*` ) / C > > do the trick for you? > -- > Sent from my phone. Please excuse my brevity. > > On December 16, 2015 4:41:13 PM PST, Matteo Richiardi > <matteo.richia...@gmail.com> wrote: >> My problem is of course more complicated, and is obviously not a >> homework. >> I just wanted to provide a minimal working example. You can replace the >> matrix C with a matrix containing any number, for what matters. Btw, >> because numbers are extracted from a Gaussian distribution, the >> likelihood >> that you draw a 0 is actually zero. >> >> Apart from this, apologies for having posted an html version. >> > snipped >>> >>> On December 16, 2015 4:18:56 PM PST, Matteo Richiardi < >>> matteo.richia...@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. >>>> >>>> Thanks a lot for your suggestions. >>>> Matteo >>>> David Winsemius Alameda, CA, USA ______________________________________________ R-help@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.