[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