[R] How can I refer to actual (n) and previous (n-1) elements in a vector?

Sarah Goslee sarah.goslee at gmail.com
Mon Dec 6 18:29:21 CET 2010


Hi Marianne,

You have to be very careful with subsetting when doing something like that -
that's where you went wrong with your original construct. This version works:
> v<-c(3,6,8,1,1,3,9,5,6,3)
> a <- numeric(length(v)-1)
> for (i in 2:length(v)) {a[i-1] <- v[i-1] + v[i]}
> a
[1]  9 14  9  2  4 12 14 11  9


But here's a more elegant way:
> v[1:(length(v)-1)] + v[2:length(v)]
[1]  9 14  9  2  4 12 14 11  9

and I'm sure there are even nicer solutions.

Sarah

On Mon, Dec 6, 2010 at 12:13 PM, Marianne Stephan
<mariannestephan at hotmail.com> wrote:
>
> Hello,
>
>
> How can I apply a function on a vector that refers to actual (n) and previous elements in the vector (e.g. n-1)?
>
>
> For example:
> I would like to calculate the sum of (n-1) + n for each element of a vector and get a vector as a result.
>
>
> Besides others I tried this:
>
>
> v<-c(3,6,8,1,1,3,9,5,6,3)
> for (i in 1:NROW(v)){a[i]<-a[i-1]+a[i]}
>
>
> I would like to get this result:
> 9,14,9,2,4,12,14,11,9
>
>
-- 
Sarah Goslee
http://www.functionaldiversity.org



More information about the R-help mailing list