数列的 R 函数
Posted
技术标签:
【中文标题】数列的 R 函数【英文标题】:R function for a number sequence 【发布时间】:2022-01-17 03:36:19 【问题描述】:我有那些序列:
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, ...]
如何制作打印这些序列的函数?
谢谢
【问题讨论】:
您的示例序列与您的第三条构造指令不匹配(例如,3+GI+P21 = 3+1+10 = 14,而不是 13)。如果您提供一些具有不同输入参数的输入并显示相应的输出,则解释您的指令会容易得多。对于提供的第一个示例,M = 3,F = 1,GI = 1,P21 = 10? M = 3、F = 1、GI = 2、P21 = 10 的预期输出是多少? @jblood94 你是对的。它只有 (3+P2I=)13。 M = 3, F = 1, GI = 1, P21 = 10 序列为:1 2 3 13 14 15 25 26 27 【参考方案1】:使用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
【讨论】:
不使用序列功能可以吗? 当然。有很多方法可以做到这一点。查看更新后的答案。 @GregorThomas 不是作业,只是为了消遣。 非常令人惊讶。 “好的,但现在不使用sequence
似乎非常适合家庭作业。以上是关于数列的 R 函数的主要内容,如果未能解决你的问题,请参考以下文章