索引障碍的分区序列

partition sequence by barriers of indices

给定一个序列s <- 10:1base R中是否有任何优雅的函数允许您为s的索引设置障碍以划分s

例如,如果barriers <- c(3,7),这意味着分离发生在s中的第3和第7个位置,这样所需的输出应该是一个分区列表,如

> list(10:8,7:4,3:1)
[[1]]
[1] 10  9  8

[[2]]
[1] 7 6 5 4

[[3]]
[1] 3 2 1

请注意,如果 barriers <- c(3,10),由于第 10 个位置的屏障之外的分区没有任何剩余,因此所需的输出应为

> list(10:8,7:1)
[[1]]
[1] 10  9  8

[[2]]
[1] 7 6 5 4 3 2 1

解决方案:感谢@RonakShah和@GKi

提供的线索
split(s, findInterval(seq_along(s), barriers, left.open = TRUE))

您可以像这样使用 splitfindInterval

s <- 10:1
barriers <- c(3,7)
split(s, findInterval(seq_along(s), barriers, left.open = TRUE))
#$`0`
#[1] 10  9  8
#
#$`1`
#[1] 7 6 5 4
#
#$`2`
#[1] 3 2 1

barriers <- c(3,10)
split(s, findInterval(seq_along(s), barriers, left.open = TRUE))
#$`0`
#[1] 10  9  8
#
#$`1`
#[1] 7 6 5 4 3 2 1