Thanks a lot Jim and Boris for replying.

Sent from my iPhone

> On Nov 9, 2015, at 1:13 AM, jim holtman <jholt...@gmail.com> wrote:
> 
> You need to take a close look at the function incomb that you are creating.  
> I see what appears to be a constant value 
> ("*(gamma((1/beta)+1))*((alpha)^(-(1/beta)))") being computed that you might 
> only have to compute once before the function.  You are also referencing many 
> variables (m, LED, j, ...) that are not being passed in that are in the 
> global environment; it is probably better to pass them in to the function.  I 
> am not sure what 'pbapply' is doing for you since I see this is new to the 
> code that you first sent out.
> 
> I would be good it you told us what the function is trying to do; you are 
> showing us how you want to do it, not what you want to do.  Are there other 
> ways of doing it?  If speed is your problem, then consider the "Rcpp" package 
> and write the function is C++ which might be faster, but again, take a look 
> at what you are doing to see if there are other ways.  I don't have time to 
> dig into the code, since there is a lack of comments, to understand why you 
> are using, e.g., 'choose', 'prod', etc.).  There are probably a lot of ways 
> of speeding up the code, if could tell us what you want to accomplish.
> 
> 
> Jim Holtman
> Data Munger Guru
>  
> What is the problem that you are trying to solve?
> Tell me what you want to do, not how you want to do it.
> 
>> On Sun, Nov 8, 2015 at 4:48 AM, Maram SAlem <marammagdysa...@gmail.com> 
>> wrote:
>> Thanks all for replying.
>> 
>> In fact I've used the the Rprof() function and found out that the incomb() 
>> function (in my code above)  takes about 80% of the time, but I didn't 
>> figure out which part of the function is causing the delay. So I thought 
>> that this may be due to the for() loops. 
>> I MUST run this code for rather large values of n and m, so is there any way 
>> that can help me do that without having to wait for more than three days to 
>> reach an output. N.B. I'll have to repeat these runs for may be 70 or 80 
>> times , and this means HUGE time
>> 
>> I'd appreciate any sort of help.
>> Thanks in advance.
>> 
>> Maram Salem
>> 
>>> On 6 November 2015 at 16:54, jim holtman <jholt...@gmail.com> wrote:
>>> If you have code that is running for a long time, then take a small case 
>>> that only runs for 5-10 minutes and turn on the RProfiler so that you can 
>>> see where you are spending your time.  In most cases, it is probably not 
>>> the 'for' loops that are causing the problem, but some function/calculation 
>>> you are doing within the loop that is consuming the time, and until you 
>>> determine what section of code that is, is it hard to tell exactly what the 
>>> problem is, much less the solution.
>>> 
>>> 
>>> Jim Holtman
>>> Data Munger Guru
>>>  
>>> What is the problem that you are trying to solve?
>>> Tell me what you want to do, not how you want to do it.
>>> 
>>>> On Wed, Nov 4, 2015 at 9:09 AM, Maram SAlem <marammagdysa...@gmail.com> 
>>>> wrote:
>>>> Hi Jim,
>>>> 
>>>> Thanks a lot for replying.
>>>> 
>>>> In fact I'm trying to run a simulation study that enables me to calculate 
>>>> the Bayes risk of a sampling plan selected from progressively type-II 
>>>> censored Weibull model. One of the steps involves evaluating the expected 
>>>> test time, which is a rather complicated formula that involves nested 
>>>> multiple summations where the counters of the summation signs are 
>>>> dependent, that's why I thought of I should create the incomb() function 
>>>> inside the loop, or may be I didn't figure out how to relate its arguments 
>>>> to the ones inside the loop had I created it outside it.  I'm trying to 
>>>> create a matrix of all the possible combinations involved in the 
>>>> summations and then use the apply() function on each row of that matrix. 
>>>> The problem is that the code I wrote works perfectly well for rather small 
>>>> values of the sample size,n, and the censoring number, m (for example, 
>>>> n=8,m=4),but when n and m are increased (say, n=25,m=15) the code keeps on 
>>>> running for days with no output. That's why I thoug!
 ht I should try to avoid explicit loops as much as possible, so I did my best 
in this regard but still the code takes too long to execute,(more than three 
days), thus, i believe there must be something wrong.
>>>> 
>>>> Here's the full code:
>>>> 
>>>> library(pbapply)
>>>> 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)
>>>> }
>>>> simpfun<- function (x,n,m,p,alpha,beta)
>>>>   {
>>>>   a<-factorial(n-m)/(prod((factorial(x)))*(factorial((n-m)- sum(x))))
>>>>   b <-  ((m-1):1)
>>>>   c<- a*((p)^(sum(x)))*((1-p)^(((m-1)*(n-m))- sum(x%*%(as.matrix(b)))))
>>>> d <- n - cumsum(x) - (1:(m-1))
>>>>   e<- n*(prod(d))*c
>>>> LD<-list()
>>>>    for (i in 1:(m-1))  {
>>>>    LD[[i]]<-seq(0,x[i],1)
>>>>    }
>>>>    LD[[m]]<-seq(0,(n-m-sum(x)),1)
>>>>    LED<-expand.grid (LD)
>>>>    LED<-as.matrix(LED)
>>>>    store1<-numeric(nrow(LED))
>>>> for (j in 1:length(store1) )
>>>>          {
>>>>             incomb<-function(x,alpha,beta) {
>>>>              
>>>> g<-((-1)^(sum(LED[j,])))*(gamma((1/beta)+1))*((alpha)^(-(1/beta)))
>>>>                     h <- choose(x, LED[j,-m])    
>>>>                    ik<-prod(h)*choose((n-m-sum(x)),LED[j,m]) 
>>>>                 lm<-cumsum(LED[j,-m]) + (1:(m-1))  
>>>>                 plm<-prod(lm)
>>>>                gil<-g*ik/(plm)
>>>>              hlm<-numeric(sum(LED[j,])+(m-1))
>>>>              dsa<-length(hlm)
>>>>               for (i in 1:dsa)  
>>>>                 {
>>>>                  ppp<- sum(LED[j,])+(m-1)
>>>>                   hlm[i]<-  
>>>> (choose(ppp,i))*((-1)^(i))*((i+1)^((-1)*((1/beta)+1)))  
>>>>                  }
>>>>           shl<-gil*(sum(hlm)+1)         
>>>>           return (shl)
>>>>           }
>>>>        store1[j]<-incomb(x,alpha=0.2,beta=2)
>>>>       }
>>>> val1<- sum(store1)*e
>>>> return(val1)
>>>> }
>>>> 
>>>> va<-pbapply(s,1,simpfun,n=6,m=4,p=0.3,alpha=0.2,beta=2)
>>>> EXP<-sum(va)
>>>> 
>>>> 
>>>> 
>>>> Any help would be greatly appreciated.
>>>> Thanks a lot  for your time.
>>>> 
>>>> Best Regards, 
>>>> Maram Salem
>>>> 
>>>> 
>>>>> On 2 November 2015 at 00:27, jim holtman <jholt...@gmail.com> wrote:
>>>>> Why are you recreating the incomb function within the loop instead of 
>>>>> defining it outside the loop?  Also you are referencing several variables 
>>>>> that are global (e.g., m & j); you should be passing these in as 
>>>>> parameters to the function.
>>>>> 
>>>>> 
>>>>> Jim Holtman
>>>>> Data Munger Guru
>>>>>  
>>>>> What is the problem that you are trying to solve?
>>>>> Tell me what you want to do, not how you want to do it.
>>>>> 
>>>>>> On Sun, Nov 1, 2015 at 7:31 AM, Maram SAlem <marammagdysa...@gmail.com> 
>>>>>> wrote:
>>>>>> Hi All,
>>>>>> 
>>>>>> I'm writing a long code that takes long time to execute. So I used the
>>>>>> Rprof() function and found out that the function that takes about 80% of
>>>>>> the time is the incomb () fucntion (below), and this is most probably
>>>>>> because of the many explicit for() loops I'm using.
>>>>>> 
>>>>>> n=18;m=4;p=0.3;alpha=0.2;beta=2
>>>>>> x=c(3,0,0)
>>>>>> LD<-list()
>>>>>>    for (i in 1:(m-1))  {
>>>>>>    LD[[i]]<-seq(0,x[i],1)
>>>>>>    }
>>>>>>    LD[[m]]<-seq(0,(n-m-sum(x)),1)
>>>>>>    LED<-expand.grid (LD)
>>>>>>    LED<-as.matrix(LED)
>>>>>>    store1<-numeric(nrow(LED))
>>>>>>     h<- numeric(m-1)
>>>>>>     lm<- numeric(m-1)
>>>>>>      for (j in 1:length(store1) )
>>>>>>          {
>>>>>>             incomb<-function(x,alpha,beta) {
>>>>>> 
>>>>>>  g<-((-1)^(sum(LED[j,])))*(gamma((1/beta)+1))*((alpha)^(-(1/beta)))
>>>>>>                   for (i in 1:(m-1))  {
>>>>>>                        h[i]<- choose(x[i],LED[j,i])
>>>>>>                        }
>>>>>>                  ik<-prod(h)*choose((n-m-sum(x)),LED[j,m])
>>>>>>                 for (i in 1:(m-1)) {
>>>>>>                        lm[i]<-(sum(LED[j,1:i])) + i
>>>>>>                      }
>>>>>>                 plm<-prod(lm)
>>>>>>                gil<-g*ik/(plm)
>>>>>>              hlm<-numeric(sum(LED[j,])+(m-1))
>>>>>>              dsa<-length(hlm)
>>>>>>               for (i in 1:dsa)
>>>>>>                 {
>>>>>>                  ppp<- sum(LED[j,])+(m-1)
>>>>>>                   hlm[i]<-
>>>>>>  (choose(ppp,i))*((-1)^(i))*((i+1)^((-1)*((1/beta)+1)))
>>>>>>                  }
>>>>>>           shl<-gil*(sum(hlm)+1)
>>>>>>           return (shl)
>>>>>>           }
>>>>>>        store1[j]<-incomb(x,alpha=0.2,beta=2)
>>>>>>       }
>>>>>> 
>>>>>> 
>>>>>> I'm trying to use alternatives (for ex. to vectorize things) to the
>>>>>> explicit for() loops, but things don't work out.
>>>>>> 
>>>>>> Any suggestions that can help me to speed up the execution of the 
>>>>>> incomb()
>>>>>> function are much appreciated.
>>>>>> 
>>>>>> Thanks a lot in advance.
>>>>>> 
>>>>>> 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.

Reply via email to