Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

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)?

like image 277
user1515534 Avatar asked Sep 19 '12 22:09

user1515534


People also ask

Can you loop through a vector?

Use a for loop and reference pointer In C++ , vectors can be indexed with []operator , similar to arrays. To iterate through the vector, run a for loop from i = 0 to i = vec.

How do you iterate through a 2D vector?

A 2D vector is a matrix, and so you'd need two iterator types: a row iterator and a column iterator. Row iterators would move "up" and "down" the matrix, whereas column iterators would move "left" and "right". You have to implement these iterator classes yourself, which is not necessarily a trivial thing to do.

How do I loop through a vector in R?

To iterate over items of a vector in R programming, use R For Loop. For every next iteration, we have access to next element inside the for loop block.

How do you traverse elements of a vector?

Vector elements are placed in contiguous storage so that they can be accessed and traversed using iterators. In vectors, data is inserted at the end. Inserting at the end takes differential time, as sometimes the array may need to be extended.


1 Answers

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.

like image 196
Gavin Simpson Avatar answered Sep 21 '22 09:09

Gavin Simpson