[R] Matrix max by row

Wacek Kusnierczyk Waclaw.Marcin.Kusnierczyk at idi.ntnu.no
Mon Mar 30 22:06:05 CEST 2009


Bert Gunter wrote:
>  
> Serves me right, I suppose. Timing seems also very dependent on the
> dimensions of the matrix. Here's what I got with my inadequate test:
>
>   
>> x <- matrix(rnorm(3e5),ncol=3)
>>     
> ## via apply
>   
>> system.time(apply(x,1,max))
>>     
>    user  system elapsed 
>    2.09    0.02    2.10
>
> ## via pmax 
>   
>> system.time(do.call(pmax,data.frame(x)))
>>     
>    user  system elapsed 
>    0.10    0.02    0.11 
>   
>
>   

yes, similar to what i got.  but with the transpose, the ratio is way
more than inverted:

    waku = expression(matrix(apply(m, 1, max), nrow(m)))
    bert = expression(do.call(pmax, data.frame(m)))

    library(rbenchmark)

    m = matrix(rnorm(1e6), ncol=10)
    benchmark(replications=10, columns=c('test', 'elapsed'),
order='elapsed',
       waku=waku,
       bert=bert)
    #   test elapsed
    # 2 bert   1.633
    # 1 waku   9.974

    m = t(m)
    benchmark(replications=10, columns=c('test', 'elapsed'),
order='elapsed',
       waku=waku,
       bert=bert)
    #   test elapsed
    # 1 waku   0.507
    # 2 bert  27.261
  

> Draw your own conclusions!
>   

my favourite:  you should have specified what 'large matrices' means.

vQ




More information about the R-help mailing list