[R] Building a random walk vector

Dirk Eddelbuettel edd at debian.org
Fri Aug 4 03:56:17 CEST 2006


On 4 August 2006 at 01:17, Matthew Wilson wrote:
| I'm studying R in my free time.  I want to build a vector where each
| element is equal to the element before it in the sequence plus some
| random tweak.
| 
| In python, I would write:
| 
| vec = [100] * 50 # make a 50-element list with each element set to 100
| from random import randint
| for i, v in enumerate(vec):
|     if i is not 0: # if we're not on the first element
|         vec[i] = vec[i-1] + randint(-2, 2)
| 
| I suspect R has some fancier way of doing this.  How to?

Yup, cumsum() is your friend. You only need the first scalar of 100,
vectorisation does the rest. Try

> set.seed(12345) 
> Z <- 100 + cumsum(runif(50,-2,2))
> summary(Z)
   Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
  98.54  100.80  102.30  102.10  103.40  105.70 
> plot(Z, type='l')

Lastly, I think N(0, some_sd) is more customary that U(-2,2) but that is easy
to change.

Cheers, Dik

-- 
Hell, there are no rules here - we're trying to accomplish something. 
                                                  -- Thomas A. Edison



More information about the R-help mailing list