2010-03-12 5 views
8

Comment puis-je construire une fonctionComment puis-je partitionner un vecteur?

slice(x, n) 

qui renvoie une liste de vecteurs où chaque vecteur sauf peut-être le dernier a la taille n, soit

slice(letters, 10) 

retournerait

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

?

Répondre

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

semble être plus rapide que la solution split ... –

8

Vous pouvez utiliser la fonction split:

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

Si vous voulez faire cela en une nouvelle fonction:

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