按位置分割向量

wus*_*978 4 r

如果有一个向量x

length(x)
# 100
Run Code Online (Sandbox Code Playgroud)

还有一个向量a,表示 x 的子向量的前导索引:

a
# 1, 5, 23, 79
Run Code Online (Sandbox Code Playgroud)

然后我想分裂x根据a如下:

list(x[1:4], x[5:22], x[23:78], x[79:100])
Run Code Online (Sandbox Code Playgroud)

在 R 中有没有一种快速的方法来做到这一点?

the*_*ail 5

前面的两个答案都依赖于制作与原始x向量长度相同的用于拆分的列表/向量。在非常长的向量的情况下,这可能效率低下,可以避免:

Map(function(i,j) x[i:j], a, cumsum(diff(c(a, length(x)+1))))
Run Code Online (Sandbox Code Playgroud)

  • +1 很酷——即使对于 100 个元素的向量也绝对是一个加速。通过用 `c(a[-1], length(x))` 替换最后一个参数,我得到了更好的加速。 (2认同)