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

David L Carlson dcarlson at tamu.edu
Thu Dec 17 17:38:17 CET 2015

```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 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
>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