以下是我正在使用的代码。我想随机抽取数字,我想继续这样做,直到所有数字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)
但那也不对,因为我只是想摆脱我已经画过的数字。
感谢您的帮助。
答案 0 :(得分:6)
这有效:
r_vecs = split(sample(18), 1:3)
工作原理。 sample(18)
是1:18的排列;并且1:3被“回收”到相同的长度。 @akrun指出使用rep(1:3, 6)
代替回收的1:3可能会更快。
评论。最好将它们保存在列表中,而不是乱用大量名为RandomArray*
的对象。矩阵将是另一个不错的选择:
r_vecs = matrix(sample(18), ncol=3)