# [R] Store results of for loop

Marc Schwartz (via MN) mschwartz at mn.rr.com
Mon Apr 24 22:51:45 CEST 2006

```On Mon, 2006-04-24 at 16:31 -0400, Doran, Harold wrote:
> I have what I'm sure will turn out to be straightforward. I want to
> store the results of a loop for some operations from a patterned vector.
> For example, the following doesn't give what I would hope for
>
> ss <- c(2,3,9)
> results <- numeric(length(ss))
> for (i in seq(along=ss)){
>    results[i] <- i + 1
>    }

Harold,

Here you are getting:

> results
 2 3 4

because 'i' is 1:3, thus:

> 1:3 + 1
 2 3 4

> The following does give what I expect, but creates a vector of length 9.
>
> ss <- c(2,3,9)
> results <- numeric(length(ss))
> for (i in ss){
>    results[i] <- i + 1
>    }

Here you are getting:

> results
  0  3  4 NA NA NA NA NA 10

because 'i' is set to 'ss' which is c(2, 3, 9). Thus, 'results' is being
indexed as results[c(2, 3, 9)].

You are adding 1 to 'ss' in the loop, thus:

> ss + 1
  3  4 10

In short:

results[ss] <- ss + 1

which yields:

> results
  0  3  4 NA NA NA NA NA 10

> What I am hoping for is that results should be a vector of length 3.

I suspect what you want is:

ss <- c(2, 3, 9)
results <- numeric(length(ss))

for (i in seq(along = ss))
{
results[i] <- ss[i] + 1
}

> results
  3  4 10

You might also want to look at ?sapply, where you could do something
like this:

> sapply(ss, function(x) x + 1)
  3  4 10

HTH,

Marc Schwartz

```