我想生成一组两个随机数(例如 [1,2]、[3,12]),第一个数字介于 1-12 之间,第二个数字介于 1-4 之间。我知道如何使用以下方法独立采样这两个数字:
sample(1:12, 1, replace = T)
sample(1:4, 1, replace = T)
但不知道如何创建一个系统来确定这两个数字的配对是否已经掷出,如果是,则再次掷出。有什么建议!?
谢谢:)
最佳答案
虽然这不能很好地扩展(如果您需要大规模模拟),您可以这样做:
set.seed(42)
di2 <- sample(setdiff(1:4, di1 <- sample(1:12, size = 1)), size = 1)
c(di1, di2)
# [1] 1 2
- 内部 (
di1
) 赋值从1:12
开始,到目前为止一切顺利。 - 然后我们从中设置差异
1:4
以便第二次采样只有不等于di1
的候选; - 外部 (
di2
) 分配样本来自1:4
没有di1
如果它在 1-4 内。
虽然不是正确性的权威证明,
rand <- replicate(100000, local({ di2 <- sample(setdiff(1:4, di1 <- sample(1:12, size=1)), size = 1); c(di1, di2); }))
dim(rand)
# [1] 2 100000
any(rand[1,] == rand[2,])
# [1] FALSE
关于r - 两个不重复的随机数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69699365/