如何在R中模拟扑克手交易?

如何在R中模拟扑克手交易?,r,R,我玩一个在线扑克游戏,我担心玩家最初的手牌不是随机的,因为在我看来,经过多次观察和太多的非随机分布之后。我试着拿200-1000手牌,和模拟牌比较,比较分布,看它是否是随机的。如果是的话,我希望是均匀分布。不管怎么说,我很难弄清楚如何存储一组1000笔交易,每手两张牌。下面是我的代码,但每个输出打印出相同的“2C和KC”,1000次。替换需要等于false,因为不能处理相同的卡。我将感谢任何人对解决这个模拟的帮助,以及任何人对这个实验的建议。提前谢谢 cardDeck <- c("AH",

我玩一个在线扑克游戏,我担心玩家最初的手牌不是随机的,因为在我看来,经过多次观察和太多的非随机分布之后。我试着拿200-1000手牌,和模拟牌比较,比较分布,看它是否是随机的。如果是的话,我希望是均匀分布。不管怎么说,我很难弄清楚如何存储一组1000笔交易,每手两张牌。下面是我的代码,但每个输出打印出相同的“2C和KC”,1000次。替换需要等于false,因为不能处理相同的卡。我将感谢任何人对解决这个模拟的帮助,以及任何人对这个实验的建议。提前谢谢

cardDeck <- c("AH", "1H", "2H", "3H", "4H", "5H", "6H", "7H", "8H", "9H", "10H", "JH", "QH", "KH",
              "AS", "1S", "2S", "3S", "4S", "5S", "6S", "7S", "8S", "9S", "10S", "JS", "QS", "KS",
              "AC", "1C", "2C", "3C", "4C", "5C", "6C", "7C", "8C", "9C", "10C", "JC", "QC", "KC",
              "AD", "1D", "2D", "3D", "4D", "5D", "6D", "7D", "8D", "9D", "10D", "JD", "QD", "KD")

deal <- function(cardDeck) {
  cardOne <- sample(cardDeck, 1, replace = FALSE)
  cardTwo <- sample(cardDeck, 1, replace = FALSE)
  handDealt <- paste(cardOne, cardTwo, sep = " and ")
}

cardsDealt <- rep(deal(cardDeck), 1000)

cardDeck您想使用
replicate
,它将评估
deal(cardDeck)
1000次,而不是
rep
,rep将评估一次,然后广播1000次结果。这是因为
replicate
的参数是
表达式
,而
rep
使用R的典型传递值行为,在调用函数之前对参数进行评估。

以下是一些改进:

紧凑地生成甲板:

cardDeck <- c(outer(c("A",1:10,"J","Q","K"),
                    c("H","S","C","D"),
                    ## could use
                    ## "\u2661","\u2662","\u2667", "\u2664"
                  paste0))
按照注释和@ssdecontrol的回答中的建议使用
replicate()

set.seed(101)
replicate(5,deal())
## [1] "6S and 2H" "JC and 8C" "KH and 2S" "4C and 4S" "6C and 2C"  

请尝试粘贴(示例(cardDeck,2,replace=FALSE),collapse=“and”)
@JoshO'Brien,这不会解决问题。@ssdecontrol好的,它肯定会解决“a”问题。如果你从同一组重新取样两次,你可能会得到两张完全相同的卡片。Replace只与函数的一次调用相关。您只会得到基本PRNG限制的随机分布。如果你不知道这意味着什么,你就无法真正开始质疑在线游戏中手牌的随机性(或者,确切地说,公平性)。我还想指出,您想要的是
sample(1:52,2,replace=FALSE)
,因为实际卡的名称与测试分布无关。FWIW,在扑克领域,1000手是一个样本中得出任何静态重要推断的一小部分。此外,如果你只是看开始的手牌,你可能会更好地计算概率分析。cardsdelt@JasonT.Eyerly语法是不同的。查看
args(replicate)
或只是
?replicate
…谢谢!非常感谢。
set.seed(101)
replicate(5,deal())
## [1] "6S and 2H" "JC and 8C" "KH and 2S" "4C and 4S" "6C and 2C"