【发布时间】:2020-03-14 16:53:12
【问题描述】:
给定一个序列s <- 10:1,base 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))
【问题讨论】:
-
您可以使用
split(s, findInterval(s, barriers + 1)),但我不明白您的第二个条件。 -
@RonakShah 感谢您的回答!第二个条件是,最后一个屏障,即
barrier <- c(3,10)中的10,位于序列的最后位置,这样s只有2个分区,10个条目。 -
@RonakShah 我猜
split(s, findInterval(seq_along(s), barriers+1))正是我需要保持与s相同顺序的东西。再次感谢您!