# R split numeric vector at position

I am wondering about the simple task of splitting a vector into two at a certain index:

splitAt <- function(x, pos){ list(x[1:pos-1], x[pos:length(x)]) } a <- c(1, 2, 2, 3) > splitAt(a, 4) [[1]] [1] 1 2 2 [[2]] [1] 3

My question: There must be some existing function for this, but I can't find it? Is maybe split a possibility? My naive implementation also does not work if pos=0 or pos>length(a).

## Answers

An improvement would be:

splitAt <- function(x, pos) unname(split(x, cumsum(seq_along(x) %in% pos)))

which can now take a vector of positions:

splitAt(a, c(2, 4)) # [[1]] # [1] 1 # # [[2]] # [1] 2 2 # # [[3]] # [1] 3

And it does behave *properly* (subjective) if pos <= 0 or pos >= length(x) in the sense that it returns the whole original vector in a single list item. If you'd like it to error out instead, use stopifnot at the top of the function.