R在位置分割数字向量

我想知道一个简单的任务是将某个向量分成两个:

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

我的问题:必须有一些现有的功能,但我找不到?也许分裂一种可能性?如果pos = 0或pos> length(a),我的天真实现也不起作用.

改进将是:

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

现在可以采取一个向量的位置:

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

如果在单个列表项中返回整个原始向量的意义上,如果pos <= 0或pos> = length(x),则它的行为正确(主观).如果您希望它出错,请使用函数顶部的stopifnot.

相关文章
相关标签/搜索