Thanks a lot Petr for ur reply and advice. Hope I 'd be able to minmize time as 
much as possible.

Regards,
Maram Salem

Sent from my iPhone

> On Oct 21, 2015, at 9:28 AM, PIKAL Petr <petr.pi...@precheza.cz> wrote:
> 
> Hi
> 
> Several options
> 
> Coding in C+ or other similar language (you seem to be more familiar with 
> them)
> 
> Using debug and find out how your function behaves in steps
> 
> Using function with smaller m, n with Rprof to see where the time is spent.
> 
> I believe that coding in R like it was C+ is the way to hell. There is 
> nothing wrong with cycles however if you compute something which can be 
> computed easily by vectorised approach you loose efficiency.
> 
> e.g.
> 
> you compute this
> m<-5
>> for ( i in 1:m-1)
> +    {
> +    b[i]<- (m-i)
> +    }
>> b
> [1] 4 3 2 1
> 
> but you can achieve it by
> 
> b <-  ((m-1):1)
> 
> Time comparison:
> 
>> m<-1e5
>> system.time(for ( i in 1:m-1) {b[i]<- (m-i)})
>   user  system elapsed
>  11.61    0.00   12.11
>> system.time(bb <- ((m-1):1))
>   user  system elapsed
>      0       0       0
>> all.equal(b,bb)
> [1] TRUE
> 
> So the time gain is huge only in this small computation.
> 
> Cheers
> Petr
> 
>> -----Original Message-----
>> From: R-help [mailto:r-help-boun...@r-project.org] On Behalf Of Maram
>> SAlem
>> Sent: Tuesday, October 20, 2015 6:33 PM
>> To: William Dunlap
>> Cc: r-help@r-project.org
>> Subject: Re: [R] Error in rep.int() invalid 'times' value
>> 
>> 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.
> 
> ________________________________
> Tento e-mail a jakékoliv k němu připojené dokumenty jsou důvěrné a jsou 
> určeny pouze jeho adresátům.
> Jestliže jste obdržel(a) tento e-mail omylem, informujte laskavě neprodleně 
> jeho odesílatele. Obsah tohoto emailu i s přílohami a jeho kopie vymažte ze 
> svého systému.
> Nejste-li zamýšleným adresátem tohoto emailu, nejste oprávněni tento email 
> jakkoliv užívat, rozšiřovat, kopírovat či zveřejňovat.
> Odesílatel e-mailu neodpovídá za eventuální škodu způsobenou modifikacemi či 
> zpožděním přenosu e-mailu.
> 
> V případě, že je tento e-mail součástí obchodního jednání:
> - vyhrazuje si odesílatel právo ukončit kdykoliv jednání o uzavření smlouvy, 
> a to z jakéhokoliv důvodu i bez uvedení důvodu.
> - a obsahuje-li nabídku, je adresát oprávněn nabídku bezodkladně přijmout; 
> Odesílatel tohoto e-mailu (nabídky) vylučuje přijetí nabídky ze strany 
> příjemce s dodatkem či odchylkou.
> - trvá odesílatel na tom, že příslušná smlouva je uzavřena teprve výslovným 
> dosažením shody na všech jejích náležitostech.
> - odesílatel tohoto emailu informuje, že není oprávněn uzavírat za společnost 
> žádné smlouvy s výjimkou případů, kdy k tomu byl písemně zmocněn nebo písemně 
> pověřen a takové pověření nebo plná moc byly adresátovi tohoto emailu 
> případně osobě, kterou adresát zastupuje, předloženy nebo jejich existence je 
> adresátovi či osobě jím zastoupené známá.
> 
> This e-mail and any documents attached to it may be confidential and are 
> intended only for its intended recipients.
> If you received this e-mail by mistake, please immediately inform its sender. 
> Delete the contents of this e-mail with all attachments and its copies from 
> your system.
> If you are not the intended recipient of this e-mail, you are not authorized 
> to use, disseminate, copy or disclose this e-mail in any manner.
> The sender of this e-mail shall not be liable for any possible damage caused 
> by modifications of the e-mail or by delay with transfer of the email.
> 
> In case that this e-mail forms part of business dealings:
> - the sender reserves the right to end negotiations about entering into a 
> contract in any time, for any reason, and without stating any reasoning.
> - if the e-mail contains an offer, the recipient is entitled to immediately 
> accept such offer; The sender of this e-mail (offer) excludes any acceptance 
> of the offer on the part of the recipient containing any amendment or 
> variation.
> - the sender insists on that the respective contract is concluded only upon 
> an express mutual agreement on all its aspects.
> - the sender of this e-mail informs that he/she is not authorized to enter 
> into any contracts on behalf of the company except for cases in which he/she 
> is expressly authorized to do so in writing, and such authorization or power 
> of attorney is submitted to the recipient or the person represented by the 
> recipient, or the existence of such authorization is known to the recipient 
> of the person represented by the recipient.

______________________________________________
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.

Reply via email to