数字序列的R函数
R function for a number sequence
我有那些序列:
1,2,3,13,14,15,25,26,27
1,2,3,4,14,15,16,17,27,28,29,30,40,41,42,43
它们的构造如下:
- 我选择一个号码M(例如:3)和一个起始号码F(例如:1);
- 我把这个数的2的次方取M^2(3*3=9)就是数列的长度;
- 序列中的数字以“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
使用 row
和 col
:
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
我有那些序列:
1,2,3,13,14,15,25,26,27
1,2,3,4,14,15,16,17,27,28,29,30,40,41,42,43
它们的构造如下:
- 我选择一个号码M(例如:3)和一个起始号码F(例如:1);
- 我把这个数的2的次方取M^2(3*3=9)就是数列的长度;
- 序列中的数字以“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
使用 row
和 col
:
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