2010-03-12 38 views
8

Làm thế nào tôi có thể xây dựng một hàmTôi có thể phân vùng một vector bằng cách nào?

slice(x, n) 

mà sẽ trả về một danh sách các vectơ trong đó mỗi vector ngoại trừ có lẽ có người cuối cùng kích thước n, tức là

slice(letters, 10) 

sẽ trở

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

?

Trả lời

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

Có vẻ là nhanh hơn so với giải pháp chia ... –

8

Bạn có thể sử dụng chức năng split:

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

Nếu bạn muốn chắc này thành một chức năng mới:

slice <- function(x, n) split(x, as.integer((seq_along(x) - 1)/n)) 
slice(letters, 10) 
Các vấn đề liên quan