R语言 不同间隔序列

p8h8hvxi  于 2022-12-25  发布在  其他
关注(0)|答案(2)|浏览(134)

seq只能使用by参数中的单个值。是否有方法对by进行矢量化,即使用多个间隔?
大概是这样的

seq(1, 10, by = c(1, 2))

将返回c(1, 2, 4, 5, 7, 8, 10),现在,这是可能的,例如,seq(1, 10, by = 1)[c(T, T, F)],因为它是一个简单的例子,但是有没有办法使它推广到更复杂的序列?
一些例子

seq(1, 100, by = 1:5)
#[1] 1 2 4 7 11 16 17 19 22 26 31...

seq(8, -5, by = c(3, 8))
#[1] 8 5 -3
8gsdolmq

8gsdolmq1#

这似乎不可能,梅尔。我想写一个很容易吧?

seq2 <- function(from, to, by) {
  
  vals <- c(0, cumsum(rep(by, abs(ceiling((to - from) / sum(by))))))
  if(from > to) return((from - vals)[(from - vals) >= to])
  else (from + vals)[(from + vals) <= to]
}

测试:

seq2(1, 10, by = c(1, 2))
#> [1]  1  2  4  5  7  8 10

seq2(1, 100, by = 1:5)
#>  [1]  1  2  4  7 11 16 17 19 22 26 31 32 34 37 41 46 47 49 52 56 61 62 64 67 71
#> [26] 76 77 79 82 86 91 92 94 97

seq2(8, -5, by = c(3, 8))
#> [1]  8  5 -3

创建于2022年12月23日,使用reprex v2.0.2

31moq8wy

31moq8wy2#

这看起来像一个近似的R基溶液吗

ans <- Reduce(`+`, rep(1:5, 100), init = 1, accumulate = TRUE)
ans[1:(which.max(ans >= 100) - 1)]

[1]  1  2  4  7 11 16 17 19 22 26 31 32 34 37 41 46 47 49 52 56 61 62 64
[24] 67 71 76 77 79 82 86 91 92 94 97

如果你想计算“down”,你必须求它的一部分的倒数

ans <- Reduce(`+`, rep(c(-3, -8), 20), init = 8, accumulate = TRUE)
ans[1:(which.max(ans <= -5) - 1)]

[1]  8  5 -3

但是,您仍然需要“猜测”创建ans所需的重复次数(在上面的示例中为100次中的20次)。

相关问题