R split numeric vector at position

r, split, vector

Solution

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.

Problem

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)`.

Original source