2012-09-19 25 views
12

Cuando recorro un vector de vectores, el resultado de cada ciclo es varios vectores. Esperaría que el resultado de cada bucle sea un vector. Consulte el siguiente ejemplo:Loop a través de un vector de vectores

> 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 

Esto es extraño lo que cabe esperar tres vectores dado que (debe) repetir tres veces dado el vector, c (foo, bar, baz). Algo así como:

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

Puede alguien explicar por qué estoy recibiendo este resultado (15 vectores) y la forma de lograr el resultado Busco (3) vectores?

+1

No existe un vector de vectores en R. La función 'c' simplemente concatena los tres vectores que le da en un vector largo. – Seth

+3

@Seth, * sí * hay un vector de vectores. Una lista es * el * vector genérico en R y puede contener vectores. Podríamos llamarlas listas, pero en lo que a R se refiere, es un vector. (En comparación con un vector atómico que contiene solo un tipo de datos, una lista es un vector cuyos elementos pueden contener cualquier tipo de datos.) –

+2

¿Me pregunto por qué se ha degradado? ¿Qué está mal? La pregunta es clara y reproducible, y contiene el resultado esperado. No sé por qué esta Q fue digna de un voto negativo, especialmente uno sin un comentario para decir por qué? –

Respuesta

14

Mira lo vects es:

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

El c() une (en este caso) los tres vectores, la concatenación de ellas en un único vector. En el bucle for(), v toma cada valor en vects y lo imprime, de ahí el resultado que ve.

¿Desea una lista de los tres vectores separados? Si es así

> 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 

En otras palabras, forme una lista de los vectores, no una combinación de los vectores.

+0

Gran explicación, gracias. – user1515534

2

Sustituya vects <- list(foo,bar,baz) por vects <- c(foo,bar,baz).

No hay tal cosa (realmente) como vector de vectores.

+0

Disiento sobre el último punto; una lista * es * un vector (es un vector genérico) y puede contener vectores (como se muestra), por lo que ... ;-) –

+0

@GavinSimpson Suspiro. ¡Correcto como de costumbre, rey Gavin! :) – joran

+0

+1 de todos modos, y especialmente para llamarme Rey. ¡Yo mando! :) –

Cuestiones relacionadas