[R] memory usage grows too fast
Ping-Hsun Hsieh
hsiehp at ohsu.edu
Fri May 15 19:15:42 CEST 2009
Hi William,
Thanks for the comments and explanation.
It is really good to know the details of rowMeans.
I did modified Peter's codes from length(x[x=="02"]) to sum(x=="02"), though it improved only in few seconds. :)
Best,
Mike
-----Original Message-----
From: William Dunlap [mailto:wdunlap at tibco.com]
Sent: Friday, May 15, 2009 10:09 AM
To: Ping-Hsun Hsieh
Subject: RE: [R] memory usage grows too fast
rowMeans(dataMatrix=="02") must
(a) make a logical matrix the dimensions of dataMatrix in which to put
the result of dataMatrix=="02" (4 bytes/logical element)
(b) make a double precision matrix (8 bytes/element) the size of that
logical matrix because rowMeans uses some C code that only works
on
doubles
apply(dataMatrix,1,function(x)length(x[x=="02"])/ncol(dataMatrix))
never has to make any copies of the entire matrix. It extracts a row
at a time and when it is done with the row, the memory used for
working on the row is available for other uses. Note that it would
probably
be a tad faster if it were changed to
apply(dataMatrix,1,function(x)sum(x=="02")) / ncol(dataMatrix)
as sum(logicalVector) is the same as length(x[logicalVector]) and there
is no need to compute ncol(dataMatrix) more than once.
Bill Dunlap
TIBCO Software Inc - Spotfire Division
wdunlap tibco.com
> -----Original Message-----
> From: Ping-Hsun Hsieh [mailto:hsiehp at ohsu.edu]
> Sent: Friday, May 15, 2009 9:58 AM
> To: Peter Alspach; William Dunlap; hadley wickham
> Cc: r-help at r-project.org
> Subject: RE: [R] memory usage grows too fast
>
> Thanks for Peter, William, and Hadley's helps.
> Your codes are much more concise than mine. :P
>
> Both William and Hadley's comments are the same. Here are their codes.
>
> f <- function(dataMatrix) rowMeans(datamatrix=="02")
>
> And Peter's codes are the following.
>
> apply(yourMatrix, 1, function(x)
> length(x[x==yourPattern]))/ncol(yourMatrix)
>
>
> In terms of the running time, the first one ran faster than
> the later one on my dataset (2.5 mins vs. 6.4 mins)
> The memory consumption, however, of the first one is much
> higher than the later. ( >8G vs. ~3G )
>
> Any thoughts? My guess is the rowMeans created extra copies
> to perform its calculation, but not so sure.
> And I am also interested in understanding ways to handle
> memory issues. Help someone could shed light on this for me. :)
>
> Best,
> Mike
>
> -----Original Message-----
> From: Peter Alspach [mailto:PAlspach at hortresearch.co.nz]
> Sent: Thursday, May 14, 2009 4:47 PM
> To: Ping-Hsun Hsieh
> Subject: RE: [R] memory usage grows too fast
>
> Tena koe Mike
>
> If I understand you correctly, you should be able to use
> something like:
>
> apply(yourMatrix, 1, function(x)
> length(x[x==yourPattern]))/ncol(yourMatrix)
>
> I see you've divided by nrow(yourMatrix) so perhaps I am missing
> something.
>
> HTH ...
>
> Peter Alspach
>
>
>
> > -----Original Message-----
> > From: r-help-bounces at r-project.org
> > [mailto:r-help-bounces at r-project.org] On Behalf Of Ping-Hsun Hsieh
> > Sent: Friday, 15 May 2009 11:22 a.m.
> > To: r-help at r-project.org
> > Subject: [R] memory usage grows too fast
> >
> > Hi All,
> >
> > I have a 1000x1000000 matrix.
> > The calculation I would like to do is actually very simple:
> > for each row, calculate the frequency of a given pattern. For
> > example, a toy dataset is as follows.
> >
> > Col1 Col2 Col3 Col4
> > 01 02 02 00 => Freq of "02" is 0.5
> > 02 02 02 01 => Freq of "02" is 0.75
> > 00 02 01 01 ...
> >
> > My code is quite simple as the following to find the pattern "02".
> >
> > OccurrenceRate_Fun<-function(dataMatrix)
> > {
> > tmp<-NULL
> > tmpMatrix<-apply(dataMatrix,1,match,"02")
> > for ( i in 1: ncol(tmpMatrix))
> > {
> > tmpRate<-table(tmpMatrix[,i])[[1]]/ nrow(tmpMatrix)
> > tmp<-c(tmp,tmpHET)
> > }
> > rm(tmpMatrix)
> > rm(tmpRate)
> > return(tmp)
> > gc()
> > }
> >
> > The problem is the memory usage grows very fast and hard to
> > be handled on machines with less RAM.
> > Could anyone please give me some comments on how to reduce
> > the space complexity in this calculation?
> >
> > Thanks,
> > Mike
> > ______________________________________________
> > 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.
> >
>
> The contents of this e-mail are confidential and may be
> subject to legal privilege.
> If you are not the intended recipient you must not use,
> disseminate, distribute or
> reproduce all or any part of this e-mail or attachments. If
> you have received this
> e-mail in error, please notify the sender and delete all
> material pertaining to this
> e-mail. Any opinion or views expressed in this e-mail are
> those of the individual
> sender and may not represent those of The New Zealand
> Institute for Plant and
> Food Research Limited.
>
More information about the R-help
mailing list