From milbo at sonic.net  Mon Apr 14 22:22:51 2008
From: milbo at sonic.net (Stephen Milborrow)
Date: Mon, 14 Apr 2008 22:22:51 +0200
Subject: [Rd] HOW TO AVOID LOOPS
References: <FC1A822CDEFB4DE38EB135F6BE851F55@your136f2019dc>
Message-ID: <004601c89e6d$9e67dd50$6401a8c0@G3>

> Le sam. 12 avr. ? 12:47, carlos martinez a ?crit :
> Looking for a simple, effective a minimum execution time solution.
>
> For a vector as:
>
> c(0,0,1,0,1,1,1,0,0,1,1,0,1,0,1,1,1,1,1,1)
>
> To transform it to the following vector without using any loops:
>
> (0,0,1,0,1,2,3,0,0,1,2,0,1,0,1,2,3,4,5,6)

Here is a fast solution using the Ra just-in-time compiler
www.milbo.users.sonic.net/ra.

jit(1)
if (length(x) > 1)
    for (i in 2:length(x))
        if (x[i])
            x[i] <- x[i-1] + 1

The times in seconds for various solutions mailed to r-devel are listed
below. There is some variation between runs and with the contents of x. The
times shown are for

set.seed(1066);  x <- as.double(runif(1e6) > .5)

This was tested on a WinXP 3 GHz Pentium D with Ra 1.0.7 (based on R 2.6.2).
The code to generate these results is attached.

vin     24
greg   11
had    3.9
dan    1.4
dan2  1.4
jit       0.25    # code is shown above, 7 secs with standard R 2.6.2>

Stephen Milborrow
www.milbo.users.sonic.net
-------------- next part --------------
An embedded and charset-unspecified text was scrubbed...
Name: cm-post.R.txt
Url: https://stat.ethz.ch/pipermail/r-devel/attachments/20080414/d4e41782/attachment.txt 


[Rd] HOW TO AVOID LOOPS
Stephen Milborrow