【问题标题】:Pull Numbers That Have Not Been Drawn拉取未抽到的号码
【发布时间】:2016-02-18 07:38:40
【问题描述】:

这是我正在使用的代码。我想随机抽取数字,并且我想继续这样做,直到所有数字 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)

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

感谢您的帮助。

【问题讨论】:

  • 如果我想命名怎么办?
  • 我不确定你所说的“做名字”是什么意思..?
  • 对不起,不是名字而是字符
  • 如果你从一个字符向量开始,比如v = LETTERS(一个内置的等于A..Z),你可以sample(v),它也给出了一个随机排列。不知道你问的是不是这个。

标签: r random generator


【解决方案1】:

这行得通:

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)

【讨论】:

  • 在某些情况下,与rep 相比,我发现回收速度很慢。 +1
  • @akrun 谢谢;我添加了一条注释。
猜你喜欢
  • 2015-05-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-07-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多