提问人:mr.T 提问时间:9/30/2023 最后编辑:mr.T 更新时间:9/30/2023 访问量:69
创建具有任意长度序列的向量
create a vector with sequences of arbitrary length
问:
我想创建一个长度的向量,它将包含任意长度的序列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
==============================================================
向量内部的序列具有任意长度
my_seq
vector 具有长度
my_seq
n
例如,我想设置向量中序列的长度范围,例如在我的代码中 任何序列的长度都是从 到 是什么意思
rep(sample(3:20,1))
3
20
我想指示序列的元素,它可以是 -1,0,1 或其他具有不同元素集和数量的东西,例如 0,1 或 1,5,10,20。 但这些将永远是价值观
int
答:
1赞
Michael M
9/30/2023
#1
你打算做什么?
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]
评论
2赞
Michael M
9/30/2023
与@Ritchie提到的问题相同
评论
-1, 0, 1
vlen <- ceiling(n/min(seq_range)); rep(x = sample(vals, vlen, replace = TRUE), times = sample(seq_range, vlen, replace = TRUE))[1:n]