Yes Indeed William. f1() works perfectly well and took only 30 secs to execute f1(25,15), but I wonder if there is anyway to speed up the execution of the rest of my code (almost seven hours now) ?
Thanks for helping. Maram Salem On 20 October 2015 at 18:11, William Dunlap <wdun...@tibco.com> wrote: > f0 is essentially your original code put into a function, so > expect it to fail in the same way your original code did. > f1 should give the same answer as f0, but it should use > less memory and time. > Bill Dunlap > TIBCO Software > wdunlap tibco.com > > > On Tue, Oct 20, 2015 at 2:05 AM, Maram SAlem <marammagdysa...@gmail.com> > wrote: > > Thanks William. I've tried the first code, ( with f0() ), but still for > > n=25, m=15 , I got this: > > > >> s<-f0(25,15) > > Error in rep.int(rep.int(seq_len(nx), rep.int(rep.fac, nx)), orep) : > > invalid 'times' value > > In addition: Warning message: > > In rep.int(rep.int(seq_len(nx), rep.int(rep.fac, nx)), orep) : > > NAs introduced by coercion to integer range > > > > > > I don't know if this is related to the memory limits of my laptop, or it > > doesn't have to do with the memory. > > > > Any help on how to fix this error will be greatly appreciated. > > > > Thanks All. > > > > Maram Salem > > > > On 15 October 2015 at 17:52, William Dunlap <wdun...@tibco.com> wrote: > >> > >> Doing enumerative combinatorics with rejection methods rarely > >> works well. Try mapping your problem to the problem of choosing > >> m-1 items from n-1. E.g., your code was > >> > >> f0 <- function(n, m) { > >> stopifnot(n > m) > >> D<-matrix(0,nrow=n-m+1,ncol=m-1) > >> for (i in 1:m-1){ > >> D[,i]<-seq(0,n-m,1) > >> } > >> ED <- do.call(`expand.grid`,as.data.frame(D)) > >> ED<-unname(as.matrix(ED)) > >> lk<-which(rowSums(ED)<=(n-m)) > >> ED[lk,] > >> } > >> > >> and I think the following does the same thing in much less space by > >> transforming the output of combn(). > >> > >> f1 <- function(n, m) { > >> stopifnot(n > m) > >> r0 <- t(diff(combn(n-1, m-1)) - 1L) > >> r1 <- rep(seq(from=0, len=n-m+1), choose( seq(to=m-2, by=-1, > >> len=n-m+1), m-2)) > >> cbind(r0[, ncol(r0):1, drop=FALSE], r1, deparse.level=0) > >> } > >> > >> The code for adding the last column is a bit clumsy and could probably > be > >> improved. Both f0 and f1 could also be cleaned up to work for m<=2. > >> > >> See Feller vol. 1 or Benjamin's "Proofs that (really) count" for more on > >> this sort of thing. > >> > >> > >> > >> Bill Dunlap > >> TIBCO Software > >> wdunlap tibco.com > >> > >> On Thu, Oct 15, 2015 at 7:45 AM, Maram SAlem <marammagdysa...@gmail.com > > > >> wrote: > >>> > >>> Dear All, > >>> > >>> I'm trying to do a simple task (which is in fact a tiny part of a > larger > >>> code). > >>> > >>> I want to create a matrix, D, each of its columns is a sequence from 0 > to > >>> (n-m), by 1. Then, using D, I want to create another matrix ED, whose > >>> rows > >>> represent all the possible combinations of the elements of the columns > of > >>> D. Then from ED, I'll select only the rows whose sum is less than or > >>> equal > >>> to (n-m), which will be called the matrix s. I used the following code: > >>> > >>> > n=5 > >>> > m=3 > >>> > D<-matrix(0,nrow=n-m+1,ncol=m-1) > >>> > for (i in 1:m-1) > >>> + { > >>> + D[,i]<-seq(0,n-m,1) > >>> + } > >>> > ED <- do.call(`expand.grid`,as.data.frame(D)) > >>> > ED<-as.matrix(ED) > >>> > >>> > lk<-which(rowSums(ED)<=(n-m)) > >>> > >>> > s<-ED[lk,] > >>> > >>> > >>> This works perfectly well. But for rather larger values of n and m > (which > >>> are not so large actually), the number of all possible combinations of > >>> the > >>> columns of D gets extremely large giving me this error (for n=25, > m=15): > >>> > >>> > ED <- do.call(`expand.grid`,as.data.frame(D)) > >>> Error in rep.int(rep.int(seq_len(nx), rep.int(rep.fac, nx)), orep) : > >>> invalid 'times' value > >>> In addition: Warning message: > >>> In rep.int(rep.int(seq_len(nx), rep.int(rep.fac, nx)), orep) : > >>> NAs introduced by coercion to integer range > >>> > >>> > >>> Any help or suggestions will be greatly appreciated. > >>> > >>> Thanks, > >>> > >>> Maram Salem > >>> > >>> [[alternative HTML version deleted]] > >>> > >>> ______________________________________________ > >>> R-help@r-project.org mailing list -- To UNSUBSCRIBE and more, see > >>> 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. > >> > >> > > > [[alternative HTML version deleted]] ______________________________________________ R-help@r-project.org mailing list -- To UNSUBSCRIBE and more, see 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.