如何用R来产生序列(1,2,3 ... n,2,3 ... n,3,4..n ... n-1,n)

Ben*_*n Z 1 r

我不知道它叫什么,嵌套算术进展可能?如果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)

有这么简单的方法吗?谢谢!

G. *_*eck 8

受试者说最后一个子序列是,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)