代码之家  ›  专栏  ›  技术社区  ›  mr.T

使用任意长度的序列创建向量

  •  0
  • mr.T  · 技术社区  · 2 年前

    我想创建一个长度向量 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 价值观

    1 回复  |  直到 2 年前
        1
  •  1
  •   Michael M    2 年前

    你打算做什么?

    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]