问题描述
我想知道在某个索引处将向量分成两个的简单任务:
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
我的问题:一定有一些现有的功能,但我找不到它?也许 split
有可能吗?如果 pos=0
或 pos>length(a)
,我的幼稚实现也不起作用.
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)
.
推荐答案
一个改进是:
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
如果 pos <= 0
或 pos >= length(x)
在某种意义上,它确实表现正确(主观)它在单个列表项中返回整个原始向量.如果您希望它出错,请在函数顶部使用 stopifnot
.
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.
这篇关于R 在位置分割数字向量的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!