创建具有任意长度序列的向量

问题描述 投票:0回答:1

我想创建一个长度为

n
的向量,它将包含任意长度的序列

我编写了一个代码来执行此操作,但对我来说它似乎不可靠并且有点荒谬。

n <- 300
vals <- c(-1,0,1)
seq_range <- 3:20

make_seq <- function() sample(vals,size=1) |> rep(sample(seq_range,1))
my_seq <- lapply(1:50,\(x) make_seq())  |> unlist() |> tail(n = n)

...

my_seq
  [1]  1  1  1  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0
 [35]  0  0  0  1  1  1  1  1  1  1  1  1  1  1  1  1  1  1  1  1  1  1  1  1  1  1  1  1  1  1  1  1  1  1
 [69]  1  1  1  1  1  1  1  1  1  1  1  1  1  1  1  1  1  1  0  0  0  0  0  0  0  0  0 -1 -1 -1 -1 -1 -1 -1
[103] -1 -1 -1 -1 -1 -1  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0
[137]  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  1  1  1  1  0  0  0  0  0  0
[171]  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  1  1  1  1  1  1  1  1  1  1  1  1  1 -1
[205] -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1  1  1  1  1  1  1  1  1  1  1  1  1  1  1  1  1  0  0  0  0
[239]  0  0  0  0  0  0  0  0  0  1  1  1  1  1  1  1  1  1  1  1  1  1  1  1  1  1  1  1  1  1  1  1  1  1
[273]  1 -1 -1 -1 -1 -1 -1 -1 -1  1  1  1  1  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0

我创建了一个列表,然后将其切成适当的大小

n
,我不喜欢它...... 有没有一种方法或现成的函数可以替换我的代码并使其变得更好?

====================================================== =============

  1. 向量内的序列

    my_seq
    具有任意长度

  2. 向量

    my_seq
    的长度为
    n

  3. 我想设置向量中序列的长度范围,例如在我的代码中

    rep(sample(3:20,1))
    任何序列的长度从
    3
    20

    是什么意思
  4. 我想指示序列的元素,它可以是-1,0,1,也可以是具有不同集合和元素数量的其他值,例如0,1或1,5,10,20。 但这些永远是

    int

r vector sequence
1个回答
0
投票

你打算做什么?

n <- 300
vals <- c(-1, 0, 1)
seq_range <- 3:20

seqs <- sample(seq_range, n %/% min(seq_range), replace = TRUE)
M <- min(which(cumsum(seqs) >= n))
v <- sample(vals, M, replace = TRUE)
rep(v, seqs[1:M])[1:n]
© www.soinside.com 2019 - 2024. All rights reserved.