[R] Large loops in R

Sarah Goslee sarah.goslee at gmail.com
Tue Dec 4 20:39:44 CET 2012


Without a reproducible example it's hard to tell for certain, but what
about simply (assuming nrows2 is actually columns):

sum((mat1/d1 - mat2/d2)^2)

R is smart enough to understand elementwise manipulation of a matrix:
you shouldn't need a loop at all.

Sarah

On Tue, Dec 4, 2012 at 2:27 PM, Charles Novaes de Santana
<charles.santana at gmail.com> wrote:
> Dear Michael,
>
> Thank you for your answer.
>
> I have 2 matrices. Each position of the matrices is a weight. And I
> need to calculate the following sum of differences:
>
> Considering:
> mat1 and mat2 - two matrices (each of them 48000 x 48000).
> d1 and d2 - two constant values.
>
> sum<-0;
> for(i in 1:nrows1){
>                         for(j in 1:nrows2){
>                                         sum<-sum+ ( ( (mat1(i,j)/d1) -
> (mat2(i,j)/d2) )^2 )
>                                 }
>                         }
>                 }
>
> I was wondering if there is a better way to do this sum.
>
> Thank you for your attention!
>
> Best,
>
> Charles
>
> On Tue, Dec 4, 2012 at 7:54 PM, R. Michael Weylandt
> <michael.weylandt at gmail.com> <michael.weylandt at gmail.com> wrote:
>>
>>
>> On Dec 4, 2012, at 6:47 PM, Charles Novaes de Santana <charles.santana at gmail.com> wrote:
>>
>>> Dear all,
>>>
>>> I need to access data from a large matrix (48000 x 48000) and to do it
>>> I am trying to run two loops using "for" command. Surely it is been a
>>> very slow job.
>>>
>>> I heard that "for" is not the best option to perform large loops in R,
>>> but I don't really know what would be the best (fast) option. sapply?
>>> vapply? Could anyone help me with this issue, please?
>>
>> What exactly are you trying to do? It's likely doable with a few vectorized operations.
>>
>> Michael
>>
>>
--
Sarah Goslee
http://www.functionaldiversity.org




More information about the R-help mailing list