1

我想创建一个随机间隔在 6-20、21-35 等之间一直到 500 的数字向量。我用 sapply 完成了这个

positions <- sapply(seq(6, 500, by = 15),function(x) x + sample(1:15, 1)) 

我想在这个序列中再添加一条规则。我不希望这个向量中的任何数字彼此相差 2,即如果我的第一个数字是 20,我不希望我的第二个数字是 21 或 22,依此类推。我怎么能做到这一点?

4

2 回答 2

2

听起来您不关心序列的长度。如果是这种情况,并且如果我正确理解了您的问题,则以下内容应该可以满足您的要求:

positions <- positions[diff(positions) > 2]

您可能还需要使用while语句,以防在删除某些值后,仍有值在要删除的阈值内。

于 2013-04-11T03:57:15.997 回答
1

这个混淆代码可以做到 - 让我看看我是否可以清理它。

positions <- c()
x <- 0
for (i in seq(6, 500, 15))
{
    sub.samples <- setdiff(1:15 + i, seq(x-2,x+2,1))
    x <- sample(sub.samples, 1)
    positions <- c(positions,x)
}
于 2013-04-11T04:07:10.083 回答