2010-03-12 21 views
8

¿Cómo puedo construir una función¿Cómo puedo particionar un vector?

slice(x, n) 

que devolverá una lista de vectores, donde cada vector excepto tal vez el último tiene tamaño n, es decir

slice(letters, 10) 

volvería

list(c("a", "b", "c", "d", "e", "f", "g", "h", "i", "j"), 
    c("k", "l", "m", "n", "o", "p", "q", "r", "s", "t"), 
    c("u", "v", "w", "x", "y", "z")) 

?

Respuesta

8
slice<-function(x,n) { 
    N<-length(x); 
    lapply(seq(1,N,n),function(i) x[i:min(i+n-1,N)]) 
} 
+0

parece ser más rápido que la solución dividida ... –

8

Usted puede utilizar la función de split:

split(letters, as.integer((seq_along(letters) - 1)/10)) 

Si usted desea hacer esto en una nueva función:

slice <- function(x, n) split(x, as.integer((seq_along(x) - 1)/n)) 
slice(letters, 10) 
Cuestiones relacionadas