如何创建一个恒定长度但在R中以不同值开始的组合序列?

时间:2014-07-19 06:48:01

标签: r

如果我有一个矢量:

c(17,18,19)

我想要

c(17:17+5, 18:18+5, 19:19+5)

或换句话说:

c(17, 18, 19, 20, 21, 22, 18, 19, 20, 21, 22, 23, 19, 20, 21, 22, 23, 24)

如何在一行中完成此操作?也许我缺少一个必不可少的R功能?这可以通过sapply来完成我确定,但想知道是否存在非迭代方法。

2 个答案:

答案 0 :(得分:3)

c(outer(0:5, x, `+`))

rep(x, each = 6) + rep(0:5, 3)

答案 1 :(得分:2)

可能有一些更简单的方法,但这是一种mapply方法。

> x <- c(17,18,19)
> c(mapply(seq, from = x, to = x + 5))
# [1] 17 18 19 20 21 22 18 19 20 21 22 23 19 20 21 22 23 24

甚至更快

> c(mapply(`:`, from = x, to = x + 5))

mapply基本上是 multi-apply ,用于将函数应用于多个矢量或列表参数。

以下实际证明比mapply

略快
> c(sapply(x, function(y) `:`(y, y+5)))