首页 > 解决方案 > 要替换的项目数不是替换长度的倍数错误?

问题描述

设置如下:假设一副标准的洗牌套牌有 52 张牌。仅使用蒙特卡罗方法来计算一副牌中前两张牌是 A 的近似概率。在您的实施开始时,将您的种子设置为 514。您应该模拟至少 10 万次实验以获得足够近似的答案。

这是我返回错误的代码:

cards <- c(1:52)

nTrials<-100000
results <-rep(NA, nTrials)#creating empty vector with 100000 NAs

for(i in 1:nTrials){
  sampled <- sample(x=cards, size=2, replace=TRUE)
  results[i]<-sampled
}
results

标签: rfor-loopreplacemontecarlo

解决方案


您在for循环的每次迭代中对两张卡进行采样。所以你2 *nTrials最后会得到卡片,它是 results分配大小的两倍。将卡片存储在列表中。

让我们假设卡号 1、14、27 和 40 是 A。您可以检查采样卡是否是 ace,%in%如果是则增加计数器。

cards <- c(1:52)
aces <- c(1, 14, 27, 40)
nTrials<-100000
results <- vector('list', nTrials)
counter <- 0

for(i in 1:nTrials){
  sampled <- sample(x=cards, size=2, replace=TRUE)
  results[[i]] <- sampled
  if(all(sampled %in% aces)) counter <- counter + 1
}
#Number of times two aces were enountered
counter 
#Probability
counter/nTrials

推荐阅读