我是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 回答
我想这就是你真正想要的:
您想要重复实验1000次,而不是从甲板上取样而不是替换1000张卡 . 所以这里存在一个概念上的误解 . 上面的
replicate
将为您提供2行和1000列的矩阵,其中每列是1000个实验中的一个的结果 .要计算您想要的概率,您需要为您提供面卡的模拟数量 . 怎么样:
然后
m/1000
是基于您的模拟的估计概率 .你的代码不是在没有更换的情况下从你的套牌中取出2张牌,而是试图拿出1000张牌而不放回任何牌 . 由于牌组没有1000张牌,所以不能取样 .
为了说明,尝试将1000减少到较小的数字(如2)并查看错误是否消失 . 您将要复制该测试1000次 .
还要注意你的牌组是13张牌而不是52张 . 如果你只是拿出一张牌(或者之后更换它),它不会影响赔率;它甚至可能无法绘制任何给定的值 . 但是,由于您在没有更换的情况下对两张卡进行采样,因此您需要一个完整的卡座 .
说第一张卡是国王 . 现在不是拥有3个国王和4个其他东西,而是在没有国王可用的情况下进行第二次抽奖,而在其他所有方面进行第二次抽奖 .
poker 是长度为13的向量 . 您试图从13中取出大小为1000的样本而不进行替换 . 该问题要求大小为2,1000倍的样本 .
尝试以下代码行...
...然后重复此功能1000次以获得绘制两张面部卡的次数 .
因为我还不能发表评论,所以我想补充一下李哲元的答案并解释你所要求的%in% .
%in%设置逻辑匹配选择,因此它为矩阵中包含c()列表中的一个字符的每个单元格返回true / false .
另一种思考方式是将它与这个grepl()语句进行比较:
它与原始代码行相同:
除了我使用grepl()告诉我矩阵中的单元格是否匹配“J”,“Q”或“K” .
你可以通过查找得到%in%?match()