数字序列的R函数

R function for a number sequence

我有那些序列:

  1. 1,2,3,13,14,15,25,26,27
  2. 1,2,3,4,14,15,16,17,27,28,29,30,40,41,42,43

它们的构造如下:

  1. 我选择一个号码M(例如:3)和一个起始号码F(例如:1);
  2. 我把这个数的2的次方取M^2(3*3=9)就是数列的长度;
  3. 序列中的数字以“GI”递增等差数列(例如:1)但M+1、2M+1等中的数字,位置为前一个数字+“P2I”递增(例如:10)[(F=)1, (1+GI=)2, (2+GI=)3, (3+P2I=)13, (13+GI=)14, ...]

如何创建打印这些序列的函数?

谢谢

使用sequence函数:

fSeq <- function(M, F, GI, P21) {
  sequence(rep(M, M), seq(F, by = (M - 1)*GI + P21, length.out = M), GI)
}

fSeq(3, 1, 1, 10)
#> [1]  1  2  3 13 14 15 25 26 27
fSeq(4, 1, 1, 10)
#>  [1]  1  2  3  4 14 15 16 17 27 28 29 30 40 41 42 43

使用 rowcol:

fSeq2 <- function(M, F, GI, P21) {
  m <- matrix(F - GI*M - P21, nrow = M, ncol = M)
  return(c(m + row(m)*GI + col(m)*(GI*(M - 1) + P21)))
}

fSeq2(3, 1, 1, 10)
#> [1]  1  2  3 13 14 15 25 26 27
fSeq2(4, 1, 1, 10)
#>  [1]  1  2  3  4 14 15 16 17 27 28 29 30 40 41 42 43

cumsum:

fSeq3 <- function(M, F, GI, P21) {
  cumsum(c(F - P21 + GI, rep(GI, M^2 - 1)) + c(P21 - GI, rep(0, M - 1)))
}

fSeq3(3, 1, 1, 10)
#> [1]  1  2  3 13 14 15 25 26 27
fSeq3(4, 1, 1, 10)
#>  [1]  1  2  3  4 14 15 16 17 27 28 29 30 40 41 42 43