我不知道这叫什么,也许是嵌套的算术级数? 如果n是整数,则说n = 50,我想要的是
(1,2,3...n,2,3...n,3,4..n...n-1,n)
就像
的串联 1:n, 2:n, ...,n-1:n
有没有简单的方法可以做到这一点? 谢谢!
答案 0 :(得分:8)
受试者说最后一个子序列是n
,但问题的正文说是(n-1):n
。我假设(n-1):n
,但要获得另一个,只需将代码中的每个n-1
更改为n
,并将代码中的每个2更改为1。
1)施加:假设我们要像这样对每个子序列的起始值进行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
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
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
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
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
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
答案 1 :(得分:0)
例如,
> n <- 4
> X <- matrix(1:n, nrow = n, ncol = n)
> X
[,1] [,2] [,3] [,4]
[1,] 1 1 1 1
[2,] 2 2 2 2
[3,] 3 3 3 3
[4,] 4 4 4 4
> lower.tri(X, diag = TRUE)
[,1] [,2] [,3] [,4]
[1,] TRUE FALSE FALSE FALSE
[2,] TRUE TRUE FALSE FALSE
[3,] TRUE TRUE TRUE FALSE
[4,] TRUE TRUE TRUE TRUE
> x <- X[lower.tri(X, diag = TRUE)]
> x
[1] 1 2 3 4 2 3 4 3 4 4
> x[-length(x)]
[1] 1 2 3 4 2 3 4 3 4