拉出未绘制的数字

Ada*_*ner 2 random r generator

这是我正在使用的代码.我想随机抽取数字,我想继续这样做,直到所有数字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)
Run Code Online (Sandbox Code Playgroud)

理想的输出是

RandomArray [1 2 3 4 5 6] RandomArray2 [7 8 9 10 11 12] RandomArray3 [13 14 15 16 17 18] 
Run Code Online (Sandbox Code Playgroud)

我也尝试过

x <- 1:18 
test2 <- sapply(x, function(x) 
  if (x == RandomArray) x-RandomArray else x)
Run Code Online (Sandbox Code Playgroud)

但这也不对,因为我只是想摆脱我已经绘制过的数字.

谢谢您的帮助.

Fra*_*ank 6

这有效:

r_vecs = split(sample(18), 1:3)
Run Code Online (Sandbox Code Playgroud)

这个怎么运作. sample(18)是1:18的排列; 并且1:3被"回收"到相同的长度.@akrun指出,使用rep(1:3, 6)代替回收的1:3可以更快.


评论.最好将它们保存在列表中,而不是乱用大量名为的对象RandomArray*.矩阵将是另一个好的选择:

r_vecs = matrix(sample(18), ncol=3)
Run Code Online (Sandbox Code Playgroud)

  • 在某些情况下,我发现与`rep`相比,recyling会变慢.+1 (2认同)