2010-03-12 12 views
8

Wie kann ich eine FunktionWie kann ich einen Vektor partitionieren?

slice(x, n) 

bauen, die eine Liste von Vektoren, wobei jeder Vektor mit Ausnahme vielleicht der letzte hat eine Größe n, dh

slice(letters, 10) 

zurückkehren würde

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

zurückkehren ?

Antwort

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

scheint die Split-Lösung schneller zu sein als ... –

8

können Sie die split Funktion:

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

Wenn Sie diese in eine neue Funktion machen wollen:

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