在 R 中生成具有交替增量的序列?

Generate sequence with alternating increments in R?

我想使用 R 创建数字序列 1:8、11:18、21:28 等,直到 1000(或它能得到的最接近值,即 998)。显然,全部输入会很乏味,但由于序列增加了 7 次,然后跳了 3 次,我不确定我可以使用什么函数来实现这一点。

我尝试了 seq(1, 998, c(1,1,1,1,1,1,1,3)),但它没有给我想要的结果,所以我一定是做错了什么。

这是 R 中矢量化(也是回收)的完美案例。了解它们

(1:100)[rep(c(TRUE,FALSE), c(8,2))]
# [1]  1  2  3  4  5  6  7  8 11 12 13 14 15 16 17 18 21 22 23 24 25 26 27 28 31 32
#[27] 33 34 35 36 37 38 41 42 43 44 45 46 47 48 51 52 53 54 55 56 57 58 61 62 63 64
#[53] 65 66 67 68 71 72 73 74 75 76 77 78 81 82 83 84 85 86 87 88 91 92 93 94 95 96
#[79] 97 98
rep(seq(0,990,by=10), each=8) + seq(1,8)

有循环:for(value in c(seq(1,991,10))){vector <- c(vector,seq(value,value+7))}

您想排除 0 or 9 (mod 10) 的数字。所以你也可以试试这个:

n <- 1000 # upper bound
x <- 1:n
x <- x[! (x %% 10) %in% c(0,9)] # filter out (0, 9) mod (10)

head(x,80)
# [1]  1  2  3  4  5  6  7  8 11 12 13 14 15 16 17 18 21 22 23 24 25 26 27  
# 28 31 32 33 34 35 36 37 38 41 42 43 44 45 46 47 48 51 52 53 54 55 56 57
# 58 61 62 63 64 65 66 67 68 71 72 73 74 75 76 77 78 81 82 83 84 85 
# 86 87 88 91 92 93 94 95 96 97 98

或者在一行中使用 Filter:

Filter(function(x) !((x %% 10) %in% c(0,9)), 1:100)
# [1]  1  2  3  4  5  6  7  8 11 12 13 14 15 16 17 18 21 22 23 24 25 26 27 28 31 32 33 34 35 36 37 38 41 42 43 44 45 46 47 48 51 52 53 54 55 56 57
# [48] 58 61 62 63 64 65 66 67 68 71 72 73 74 75 76 77 78 81 82 83 84 85 86 87 88 91 92 93 94 95 96 97 98