首页 文章

计算R编程中的概率

提问于
浏览
0

我是R的新手,我正在做一个练习题 . 计算连续绘制两张面牌(杰克,皇后,国王)的概率 . 模拟52张牌的标准牌组(没有Jokers) . 从甲板上取样两张卡1000次(记住,我们不会在绘图后更换卡) . 如何绘制两张面部卡的比例与您计算的概率相比如何?这是我试过的:

poker <- c(1:10, "J", "Q", "K")

 poker_face <- sample(poker, size = 1000, replace = FALSE)

它给了我:

Error in sample.int(length(x), size, replace, prob) :    cannot take a
 sample larger than the population when 'replace = FALSE'

4 回答

  • 1

    我想这就是你真正想要的:

    poker_face <- replicate(1000, sample(poker, size =2, replace = FALSE))
    

    您想要重复实验1000次,而不是从甲板上取样而不是替换1000张卡 . 所以这里存在一个概念上的误解 . 上面的 replicate 将为您提供2行和1000列的矩阵,其中每列是1000个实验中的一个的结果 .

    要计算您想要的概率,您需要为您提供面卡的模拟数量 . 怎么样:

    m <- sum(colSums(matrix(poker_face %in% c("J", "Q", "K"), nrow = 2)) == 2)
    

    然后 m/1000 是基于您的模拟的估计概率 .

  • 1

    你的代码不是在没有更换的情况下从你的套牌中取出2张牌,而是试图拿出1000张牌而不放回任何牌 . 由于牌组没有1000张牌,所以不能取样 .

    为了说明,尝试将1000减少到较小的数字(如2)并查看错误是否消失 . 您将要复制该测试1000次 .

    还要注意你的牌组是13张牌而不是52张 . 如果你只是拿出一张牌(或者之后更换它),它不会影响赔率;它甚至可能无法绘制任何给定的值 . 但是,由于您在没有更换的情况下对两张卡进行采样,因此您需要一个完整的卡座 .

    说第一张卡是国王 . 现在不是拥有3个国王和4个其他东西,而是在没有国王可用的情况下进行第二次抽奖,而在其他所有方面进行第二次抽奖 .

  • 1

    poker 是长度为13的向量 . 您试图从13中取出大小为1000的样本而不进行替换 . 该问题要求大小为2,1000倍的样本 .

    尝试以下代码行...

    sample(poker, size = 2, replace = FALSE)
    

    ...然后重复此功能1000次以获得绘制两张面部卡的次数 .

  • 2

    因为我还不能发表评论,所以我想补充一下李哲元的答案并解释你所要求的%in% .

    %in%设置逻辑匹配选择,因此它为矩阵中包含c()列表中的一个字符的每个单元格返回true / false .

    另一种思考方式是将它与这个grepl()语句进行比较:

    m <- sum(colSums(matrix(grepl("J|Q|K", poker_face), nrow = 2)) == 2)
    

    它与原始代码行相同:

    m <- sum(colSums(matrix(poker_face %in% c("J", "Q", "K"), nrow = 2)) == 2)
    

    除了我使用grepl()告诉我矩阵中的单元格是否匹配“J”,“Q”或“K” .

    你可以通过查找得到%in%?match()

相关问题