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