[R] Loops

PIKAL Petr petr.pikal at precheza.cz
Wed Jun 26 09:51:12 CEST 2013


Hi

> -----Original Message-----
> From: r-help-bounces at r-project.org [mailto:r-help-bounces at r-
> project.org] On Behalf Of bett kimutai
> Sent: Wednesday, June 26, 2013 3:17 AM
> To: Law, Jason; r-help at r-project.org
> Subject: Re: [R] Loops
> 
> Thanks for you response. The issue is that I need to run a thousand
> simulations for each pipe (20000) and then get an average of the values
> that are below the condition I have set. When I ran the code, I only
> get just a thousand values meaning it gives me values for a single

How do you get result with syntax error code? 

Anyway did you give a chance to help provided by Jason? If I understand your code, you have three "k" values based on them you compute three "l" values with a differnt constant each time. Based on this you can get

> k<-c(1.15, .504, .43) 
> (7.16-0.44+0.12-0.016)
[1] 6.824
> (8.01-1.5+0.35+0.45)
[1] 7.31
> 9.55-2.45+0.40+0.65
[1] 8.15
> m<-c(6.824,7.31,8.15)
> l=exp((1/k)*(m))
> l
[1] 3.776293e+02 1.990643e+06 1.703709e+08

then you want to get z vector in 3 steps

z <- (log(1/p)*l[1])^k[1]
z[z<=684] <-  (log(1/p)*l[2])^k[2]
z[z<=684] <-  (log(1/p)*l[3])^k[3]

you maybe want to subset also p

and you need top repeat this 1000 times probably in loop to populate resulting matrix.

Anyyway some example of data and working code would be helpful.

Regards
Petr


> pipe. How can I rectify my loop to run for all the pipes and then
> create a table to hold these values. Sorry for the syntax errors,
> I guess I will get them with time.
> 
> 
> thanks again..
> 
> ________________________________
>  From: "Law, Jason" <Jason.Law at portlandoregon.gov>
> 
> ect.org>
> Sent: Tuesday, June 25, 2013 3:32 PM
> Subject: RE: [R] Loops
> 
> 
> Not sure what you're trying to do, but it looks like most of what
> you're attempting to do in the code can be done just using vectors
> rather than loops, at least the inner loop.  For example:
> 
> k <- 1.15
> l <- exp((1 / k) * (7.16 - 0.44 + 0.12 - 0.016))
> z <- (log(1 / p) * l)^k
> 
> See ifelse for how to do the if tests on a vector.  In addition, much
> of the code in your loops doesn't vary with the loop indices and can be
> moved outside your loop (e.g., setting k = 1.15).  If you really
> want/need to use loops, you'll have to initialize the vectors/matrices
> within your loop with some value:
> 
> z <- numeric(1000)
> 
> Finally, you have some plain syntax errors:
> 
> p[i]=[i+1].
> 
> That's not valid R code; '[' is the extraction operator, see
> help('[').  I'm not sure what you're trying to do there.  Perhaps:
> 
> p[i] <- p[i + 1]
> 
> HTH,
> 
> Jason Law
> 
> 
> 
> -----Original Message-----
> From: r-help-bounces at r-project.org [mailto:r-help-bounces at r-
> project.org] On Behalf Of bett kimutai
> Sent: Tuesday, June 25, 2013 1:32 PM
> To: r-help at r-project.org
> Subject: [R] Loops
> 
> Dear All,
> 
> 
> I  have spent most of my time trying to figure out how to simulate the
> number of breaks in a pipe using Monte Carlo simulation.
> i have 20,000 individual pipes that i have to run, and for each pipe i
> have to run 1000 times while checking some conditions and therefore, i
> have to use a nested loop.
> what i would like to have as a final result is a matrix table with with
> all the individual pipe elements and the simulated runs here is the
> loop that i tried to create x=20000 y=matrix(x, z)
> p=runif(1000)
> for(j in 1:20000) {
> for(i in 1:1000) {
>        k=1.15
>     l=exp((1/k)*(7.16-0.44+0.12-0.016))
> 
>     z[i]=(log(1/p[i])*l)^k
> 
>     if (z[i] <=684)
>     {
>         k1=0.504
>         l1=exp((1/k)*(8.01-1.5+0.35+0.45))
>         z1[i]=(log(1/p[i])*l1)^k1
>     if (z1[i] <=684)
>     {
>                 k2=0.43
>         l2=exp((1/k2)*(9.55-2.45+0.40+0.65))
>         z2[i]=(log(1/p[i])*l2)^k2
>                 p[i]=[i+1]
>                 break()
>             }
>         }
>     }
> x[ j ]=[ j+1 ]
> }
> the last column of the table,  in addition to the simulated runs, i
> would like to have the summary of the means (for z<=684) of individual
> row as this means will give me the number of breaks.
> i will really appreciate if anyone who can help me figure out how to go
> about this. pardon me, I am new to R and programming.
> 
> 
> 
> Thank you in Advance,
> 
> Eliab
>     [[alternative HTML version deleted]]
> 
> ______________________________________________
> R-help at 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.
>     [[alternative HTML version deleted]]
> 	[[alternative HTML version deleted]]



More information about the R-help mailing list