"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 > "Jean V Adams" <jvad...@usgs.gov> wrote on 07/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.