计算R编程中的概率

时间:2016-08-08 01:04:54

标签: r statistics probability

我是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 个答案:

答案 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%