[R] Help with basic loop

Ivan Calandra ivan.calandra at uni-hamburg.de
Mon Apr 11 11:00:26 CEST 2011


Well, I was quite blind not to change 1 to 1000 in runif() and use 
replicate()!!
It gets even faster if you create prob first.

Ivan

Le 4/11/2011 10:53, Dennis Murphy a écrit :
> Hi:
>
> Let's assume the lengths of each vector are the same so that they can 
> be multiplied. Here's the timing on my machine:
>
> > system.time(replicate(1000, { prob<-numeric(1000)
> +
> + for (n in 1:1000) {
> + task1 <- runif(1, min=0.8, max= 0.9)
> + task2 <- runif(1, min=0.75, max= 0.85)
> + task3 <- runif(1, min=0.81, max= 0.89)
> + prob[n]<-task1*task2*task3
> + }
> +   }))
>    user  system elapsed
>   16.96    0.01   17.19
> > system.time(replicate(1000, {
> +  task1 = runif(1000, min = 0.8, max = 0.9)
> +  task2 <- runif(1000, min = 0.75, max = 0.85)
> +  task3 <- runif(1000, min = 0.81, max = 0.89)
> +  prob <- task1 * task2 * task3 } ))
>    user  system elapsed
>    0.37    0.00    0.39
>
> Dennis
>
> On Mon, Apr 11, 2011 at 1:42 AM, Ivan Calandra 
> <ivan.calandra at uni-hamburg.de <mailto:ivan.calandra at uni-hamburg.de>> 
> wrote:
>
>     Hi,
>
>     I think you can do this without a loop (well, replicate() is based
>     on sapply()):
>     prob<-numeric(1000)
>     task1 <- replicate(1000,runif(1, min=0.8, max= 0.9))
>     task2 <- replicate(1000,runif(1, min=0.75, max= 0.85))
>     task3 <- replicate(1000,runif(1, min=0.81, max= 0.89))
>     prob <- task1*task2*task3
>
>     It might not be faster, but I don't think it can be slower. And I
>     find the code easier and clearer.
>     Please correct me if this is not equivalent.
>
>     HTH,
>     Ivan
>
>
>     Le 4/11/2011 01:06, Daniel Malter a écrit :
>
>         The loop is correct, you just need to make sure that your
>         result is computed
>         and stored as the n-th element that is returned by the loop.
>         Pick up any
>         manual of R, and looping will be explained there. Also, I
>         would recommend
>         that you draw a random number for every iteration of the loop.
>         Defining the
>         random vectors outside the loop make sense to me only if they
>         are the same
>         length as n.
>
>         prob<-numeric(1000)
>
>         for (n in 1:1000) {
>         task1<- runif(1, min=0.8, max= 0.9)
>         task2<- runif(1, min=0.75, max= 0.85)
>         task3<- runif(1, min=0.81, max= 0.89)
>         prob[n]<-task1*task2*task3
>         }
>
>         If you wanted to store the individual probabilities
>         (task1..3), you would
>         proceed accordingly by defining them outside the loop and
>         storing the value
>         in the loop as the n-th element of that vector just like for prob.
>
>         HTH,
>         Daniel
>
>         --
>         View this message in context:
>         http://r.789695.n4.nabble.com/Help-with-basic-loop-tp3440190p3440607.html
>         Sent from the R help mailing list archive at Nabble.com.
>
>         ______________________________________________
>         R-help at r-project.org <mailto: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.
>
>
>     -- 
>     Ivan CALANDRA
>     PhD Student
>     University of Hamburg
>     Biozentrum Grindel und Zoologisches Museum
>     Abt. Säugetiere
>     Martin-Luther-King-Platz 3
>     D-20146 Hamburg, GERMANY
>     +49(0)40 42838 6231 <tel:%2B49%280%2940%2042838%206231>
>     ivan.calandra at uni-hamburg.de <mailto:ivan.calandra at uni-hamburg.de>
>
>     **********
>     http://www.for771.uni-bonn.de
>     http://webapp5.rrz.uni-hamburg.de/mammals/eng/1525_8_1.php
>
>
>     ______________________________________________
>     R-help at r-project.org <mailto: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.
>
>

-- 
Ivan CALANDRA
PhD Student
University of Hamburg
Biozentrum Grindel und Zoologisches Museum
Abt. Säugetiere
Martin-Luther-King-Platz 3
D-20146 Hamburg, GERMANY
+49(0)40 42838 6231
ivan.calandra at uni-hamburg.de

**********
http://www.for771.uni-bonn.de
http://webapp5.rrz.uni-hamburg.de/mammals/eng/1525_8_1.php



More information about the R-help mailing list