我不知道它叫什么,嵌套算术进展可能?如果n是一个整数,比如n = 50,我想要的是什么
(1,2,3...n,2,3...n,3,4..n...n-1,n)
Run Code Online (Sandbox Code Playgroud)
它就像串联一样
1:n, 2:n, ...,n-1:n
Run Code Online (Sandbox Code Playgroud)
有这么简单的方法吗?谢谢!
受试者说最后一个子序列是,n但问题的主体说它是(n-1):n.我假设(n-1):n只是让另一个只是n-1将代码中的n每一个更改为代码中的每个2和1.
1)lapply假设我们想要1:n,2:n,...,(n-1):n迭代每个子序列的起始值,如下所示:
n <- 4
unlist(lapply(seq_len(n-1), seq, n))
## [1] 1 2 3 4 2 3 4 3 4
Run Code Online (Sandbox Code Playgroud)
2)序列另一种方法是sequence(seq(n, 2))像这样转换:
s <- sequence(seq(n, 2))
s + cumsum(s == 1) - 1
## [1] 1 2 3 4 2 3 4 3 4
Run Code Online (Sandbox Code Playgroud)
3)外
m <- outer(seq_len(n), seq_len(n-1), ">=") * seq(n)
m[m > 0]
## [1] 1 2 3 4 2 3 4 3 4
Run Code Online (Sandbox Code Playgroud)
3a)(3 )的这种变化也有效:
m <- outer(seq_len(n), seq_len(n-1), "+") - 1
m[m <= n]
## [1] 1 2 3 4 2 3 4 3 4
Run Code Online (Sandbox Code Playgroud)
4)减少
f <- function(x, y) c(x, seq(y, n))
Reduce(f, 1:(n-1), c())
## [1] 1 2 3 4 2 3 4 3 4
Run Code Online (Sandbox Code Playgroud)
5)递归
Recurse <- function(v) {
if (length(v) > 2) c(v, Recall(tail(v, -1))) else v
}
Recurse(1:n)
## [1] 1 2 3 4 2 3 4 3 4
Run Code Online (Sandbox Code Playgroud)