[R] Matrix max by row

Bill.Venables at csiro.au Bill.Venables at csiro.au
Mon Mar 30 06:38:08 CEST 2009


It seems to be very system dependent.  Here's another take:

> m <- matrix(runif(100000),1000,100)
> junk <- gc()
> print(system.time(for(i in 1:100) X1 <- do.call(pmax,data.frame(m))))
   user  system elapsed 
   1.53    0.01    1.57 
> junk <- gc()
> print(system.time(for(i in 1:100) X2 <- apply(m,1,max)))
   user  system elapsed 
   1.81    0.00    1.83 
> 

Now what happens if you work with data frames rather than matrices:

> m <- data.frame(matrix(runif(100000),1000,100))
> junk <- gc()
> print(system.time(for(i in 1:100) X1 <- do.call(pmax, m)))
   user  system elapsed 
   0.31    0.00    0.31 
> junk <- gc()
> print(system.time(for(i in 1:100) X2 <- apply(m,1,max)))
   user  system elapsed 
   3.22    0.03    3.34 
> 

Go figure!  


Bill Venables
http://www.cmis.csiro.au/bill.venables/ 


-----Original Message-----
From: r-help-bounces at r-project.org [mailto:r-help-bounces at r-project.org] On Behalf Of Rolf Turner
Sent: Monday, 30 March 2009 1:39 PM
To: Bert Gunter
Cc: 'Wacek Kusnierczyk'; r-help at r-project.org
Subject: Re: [R] Matrix max by row

I tried the following:

m <- matrix(runif(100000),1000,100)
junk <- gc()
print(system.time(for(i in 1:100) X1 <- do.call(pmax,data.frame(m))))
junk <- gc()
print(system.time(for(i in 1:100) X2 <- apply(m,1,max)))

and got

    user  system elapsed
   2.704   0.110   2.819
    user  system elapsed
   1.938   0.098   2.040

so unless there's something that I am misunderstanding (always a serious
consideration) Wacek's apply method looks to be about 1.4 times  
*faster* than
the do.call/pmax method.

	cheers,

		Rolf Turner


On 30/03/2009, at 3:55 PM, Bert Gunter wrote:

> If speed is a consideration,availing yourself of the built-in pmax()
> function via
>
> do.call(pmax,data.frame(yourMatrix))
>
> will be considerably faster for large matrices.
>
> If you are puzzled by why this works, it is a useful exercise in R  
> to figure
> it out.
>
> Hint:The man page for ?data.frame says:
> "A data frame is a list of variables of the same length with unique  
> row
> names, given class 'data.frame'."
>
> Cheers,
> Bert
>
> Bert Gunter
> Genentech Nonclinical Statistics
>
> -----Original Message-----
> From: r-help-bounces at r-project.org [mailto:r-help-bounces at r- 
> project.org] On
> Behalf Of Wacek Kusnierczyk
> Sent: Saturday, March 28, 2009 5:22 PM
> To: Ana M Aparicio Carrasco
> Cc: r-help at r-project.org
> Subject: Re: [R] Matrix max by row
>
> Ana M Aparicio Carrasco wrote:
>> I need help about how to obtain the max by row in a matrix.
>> For example if I have the following matrix:
>> 2 5 3
>> 8 7 2
>> 1 8 4
>>
>> The max by row will be:
>> 5
>> 8
>> 8
>>
>
> matrix(apply(m, 1, max), nrow(m))
>
> vQ
>
> ______________________________________________
> R-help at r-project.org mailing list
> 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.
>
> ______________________________________________
> R-help at r-project.org mailing list
> 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.


######################################################################
Attention:\ This e-mail message is privileged and confid...{{dropped:9}}

______________________________________________
R-help at r-project.org mailing list
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.




More information about the R-help mailing list