拉出尚未抽出的号码

Pull Numbers That Have Not Been Drawn

这是我正在使用的代码。我想随机抽取数字,我想一直这样做,直到抽出所有数字 1:18。我不想两次绘制相同的数字。

RandomArray <- sample(1:18, 6, replace=F)

RandomArray2 <- sample(1:18,6, replace = F)
RandomArray3 <- sample(1:18,6, replace = F)
RandomArray2 <- ifelse(RandomArray==RandomArray2,
  sample(1:18,6,replace=F),RandomArray2)

RandomArray3 <- ifelse(RandomArray2==RandomArray3,
            sample(1:18,6,replace=F),RandomArray3)

理想的输出是

RandomArray [1 2 3 4 5 6] RandomArray2 [7 8 9 10 11 12] RandomArray3 [13 14 15 16 17 18] 

我也试过

x <- 1:18 
test2 <- sapply(x, function(x) 
  if (x == RandomArray) x-RandomArray else x)

但这也不对,因为我只想去掉已经画好的数字。

感谢您的帮助。

这个有效:

r_vecs = split(sample(18), 1:3)

它是如何工作的。 sample(18) 是 1:18 的排列; 1:3 是 "recycled" 相同的长度。 @akrun 指出使用 rep(1:3, 6) 代替回收的 1:3 会更快。


评论。 最好将它们保存在一个列表中,而不是与一大堆像 RandomArray* 这样命名的对象混在一起。矩阵将是另一个不错的选择:

r_vecs = matrix(sample(18), ncol=3)