r - 要替换的项目数不是替换长度的倍数错误?
问题描述
设置如下:假设一副标准的洗牌套牌有 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
解决方案
您在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
推荐阅读
- join - proc sql 内部连接行为和所需的选择语句
- hadoop - “hdfs dfs -du”与“hdfs dfs -count”,预期相同结果的差异
- html - 如何制作自适应 iFrame 高度?
- javascript - 两个值不会像假设的那样在动作上增加
- python - 如何使用密码和桌面快捷方式为我的 Python 应用程序创建安装文件?
- r - 如何使用另一列中的值过滤列数据框中的数据?
- php - 如何使用 Yii 1.1 框架通过 PHP 下载过滤后的 CSV 文件
- javascript - 语法错误:导入声明只能出现在模块的顶层
- java - 在没有 NPE 的情况下安全地从链中获取价值
- javascript - 如何使用自动完成下拉菜单中的按钮来进一步过滤已经显示的结果