user1515534
user1515534

Reputation: 193

Loop through a vector of vectors

When I loop through a vector of vectors, the result of each loop is several vectors. I would expect the result of each loop to be a vector. Please see the following example:

foo <- seq(from=1, to=5, by=1)
bar <- seq(from=6, to=10, by=1)
baz <- seq(from=11, to=15, by=1)
vects <- c(foo,bar,baz)
for(v in vects) {print(v)}

# [1] 1
# [1] 2
# [1] 3
# [1] 4
# [1] 5
# [1] 6
# [1] 7
# [1] 8
# [1] 9
# [1] 10
# [1] 11
# [1] 12
# [1] 13
# [1] 14
# [1] 15

This is odd as I would expect three vectors given it (should) iterate three times given the vector, c(foo,bar,baz). Something like:

# [1]  1  2  3  4  5
# [1]  6  7  8  9 10
# [1] 11 12 13 14 15

Can anyone explain why I am getting this result (15 vectors) and how to achieve the result I am looking for (3 vectors)?

Upvotes: 18

Views: 21993

Answers (2)

Gavin Simpson
Gavin Simpson

Reputation: 174948

Look at what vects is:

> vects
 [1]  1  2  3  4  5  6  7  8  9 10 11 12 13 14 15

The c() joins (in this case) the three vectors, concatenating them into a single vector. In the for() loop, v takes on each values in vects in turn and prints it, hence the result you see.

Did you want a list of the three separate vectors? If so

> vects2 <- list(foo, bar, baz)
> for(v in vects2) {print(v)}
[1] 1 2 3 4 5
[1]  6  7  8  9 10
[1] 11 12 13 14 15

In other words, form a list of the vectors, not a combination of the vectors.

Upvotes: 22

joran
joran

Reputation: 173727

Substitute vects <- list(foo,bar,baz) for vects <- c(foo,bar,baz).

There is no such thing (really) as a vector of vectors.

Upvotes: 3

Related Questions