"Reith, William [USA]" <reith_will...@bah.com> wrote on 07/20/2012 
09:52:02 AM:

> Would this matrix eat up memory making the rest of my program 
> slower? Each x needs to be multiplied by a matrix and the results 
> checked against a set of thresholds. Doing them one at a time takes 
> at least 24 hours right now. 
> 
> Optimizing a program is not my thing. 
> 
> Sent from my Verizon Wireless 4GLTE smartphone


It's not mine either.
Better to ask the group.
I'm ccing R-help on this message.

Jean


> ----- Reply message -----
> From: "Jean V Adams" <jvad...@usgs.gov>
> To: "Reith, William [USA]" <reith_will...@bah.com>
> Cc: "r-help@r-project.org" <r-help@r-project.org>
> Subject: [External] Re: [R] Speeding up a loop
> Date: Fri, Jul 20, 2012 10:05 am

> 
> 
> I've had to do something similar, so I wrote a small function to help. 
> This runs in about 1/4 the time of your code on my machine. 
> Others may have a more efficient approach. 
> 
> all.combs <- function(num, from=0, to=num) { 
>         # create a matrix of all possible combinations of num items 
>         # restrict each row to have between "from" and "to" items 
>         res <- vector("list", to-from+1) 
>         for(i in seq(from:to)) { 
>                 j <- (from:to)[i] 
>                 if(j==0) res[[i]] <- rep(FALSE, num) 
>                 comb <- combn(num, j) 
>                 res[[i]] <- t(apply(comb, 2, function(x) !is.na
> (match(1:num, x)))) 
>                 } 
>         do.call(rbind, res) 
>         } 
> 
> all.combs(20, 5, 13) 
> 
> Jean 
> 
> 
> wwreith <reith_will...@bah.com> wrote on 07/20/2012 07:45:30 AM:
> 
> > General problem: I have 20 projects that can be invested in and I need 
to
> > decide which combinations meet a certain set of standards. The total
> > possible combinations comes out to 2^20. However I know for a fact 
that the
> > number of projects must be greater than 5 and less than 13. So far the 
the
> > code below is the best I can come up with for iteratively creating a 
set to
> > check against my set of standards.
> > 
> > Code
> > x<-matrix(0,nrow=1,ncol=20)
> > for(i in 1:2^20)
> > {
> > x[1]<-x[1]+1
> >   for(j in 1:20)
> >   {
> >     if(x[j]>1)
> >     {
> >       x[j]=0
> >       if(j<20)
> >       {
> >         x[j+1]=x[j+1]+1
> >       }
> >     }
> >   }
> > if(sum(x)>5 && sum(x)<13)
> > {
> > # insert criteria here.
> > }
> > }
> > 
> > my code forces me to create all 2^20 x's and then use an if statement 
to
> > decide if x is within my range of projects. Is there a faster way to
> > increment x. Any ideas on how to kill the for loop so that it won't 
attempt
> > to process an x where the sum is greater than 12 or less than 6?
        [[alternative HTML version deleted]]

______________________________________________
R-help@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.

Reply via email to