Matteo Richiardi
2015-Dec-17 00:41 UTC
[R] Applying a function to a matrix using indexes as arguments
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. On 17 December 2015 at 00:36, Jeff Newmiller <jdnewmil at dcn.davis.ca.us> wrote:> This calculation divides by values centered around zero. The only context > that I can think of that would require such silliness is a homework > problem, and this list has a no-homework policy. If not, then mentioning > the theory you are applying might help someone point you at an existing > function that achieves your goals while avoiding divide-by-zero errors. > > Since you also posted in HTML I gather that you have not read the Posting > Guide mentioned below. Avoiding HTML on this list is to your benefit, since > using it inevitably leads to others seeing a garbled version of what you > sent. Please read the PG for more important guidance. > -- > Sent from my phone. Please excuse my brevity. > > On December 16, 2015 4:18:56 PM PST, 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. >> >> 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. >> >>[[alternative HTML version deleted]]
Jeff Newmiller
2015-Dec-17 01:00 UTC
[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.richiardi at 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. > >On 17 December 2015 at 00:36, Jeff Newmiller <jdnewmil at dcn.davis.ca.us> >wrote: > >> This calculation divides by values centered around zero. The only >context >> that I can think of that would require such silliness is a homework >> problem, and this list has a no-homework policy. If not, then >mentioning >> the theory you are applying might help someone point you at an >existing >> function that achieves your goals while avoiding divide-by-zero >errors. >> >> Since you also posted in HTML I gather that you have not read the >Posting >> Guide mentioned below. Avoiding HTML on this list is to your benefit, >since >> using it inevitably leads to others seeing a garbled version of what >you >> sent. Please read the PG for more important guidance. >> -- >> Sent from my phone. Please excuse my brevity. >> >> On December 16, 2015 4:18:56 PM PST, 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. >>> >>> 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. >>> >>>[[alternative HTML version deleted]]
David L Carlson
2015-Dec-17 16:38 UTC
[R] Applying a function to a matrix using indexes as arguments
Also A %*% t(B) / C 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-bounces at r-project.org] On Behalf Of Jeff Newmiller Sent: Wednesday, December 16, 2015 7:01 PM To: Matteo Richiardi; r-help at 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.richiardi at 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. > >On 17 December 2015 at 00:36, Jeff Newmiller <jdnewmil at dcn.davis.ca.us> >wrote: > >> This calculation divides by values centered around zero. The only >context >> that I can think of that would require such silliness is a homework >> problem, and this list has a no-homework policy. If not, then >mentioning >> the theory you are applying might help someone point you at an >existing >> function that achieves your goals while avoiding divide-by-zero >errors. >> >> Since you also posted in HTML I gather that you have not read the >Posting >> Guide mentioned below. Avoiding HTML on this list is to your benefit, >since >> using it inevitably leads to others seeing a garbled version of what >you >> sent. Please read the PG for more important guidance. >> -- >> Sent from my phone. Please excuse my brevity. >> >> On December 16, 2015 4:18:56 PM PST, 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. >>> >>> 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. >>> >>>[[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.