R Studio作业求助:抛硬币模拟最长正面连续次数计算报错
抛硬币最长正面连续次数模拟问题排查
问题根源
你遇到的dim(x)需为正值错误,以及得到全0的1×4矩阵,核心是两个操作失误:
- 错误将
toss赋值为数字100,而非你创建的100×2500抛硬币结果矩阵,apply函数无法对无维度的数字进行操作,触发维度错误。 - 可能存在矩阵维度与
apply参数不匹配的情况,导致计算逻辑未作用在正确的重复试验数据上。
修正步骤
1. 确保toss是正确的100×2500矩阵
先确认你创建的矩阵维度正确,比如用以下代码生成符合要求的矩阵(以0代表反面、1代表正面为例):
# 生成100行(单次试验的100次抛硬币)×2500列(2500次重复试验)的矩阵 toss <- matrix(sample(c(0, 1), 100*2500, replace = TRUE), nrow = 100, ncol = 2500)
如果用"H"/"T"表示,代码为:
toss <- matrix(sample(c("H", "T"), 100*2500, replace = TRUE), nrow = 100, ncol = 2500)
用dim(toss)检查输出,确认是100 2500。
2. 修正最长连续正面次数计算代码
如果用0/1表示结果,代码可以简化为:
longest_runs <- apply(toss, 2, function(col) { runs <- rle(col) max_run <- max(runs$lengths[runs$values == 1], default = 0) return(max_run) })
如果用"H"/"T",你的原逻辑没问题,只需确保toss是正确矩阵:
longest_runs <- apply(toss, 2, function(replication) { runs <- rle(replication) max_heads_run <- max(runs$lengths[runs$values == "H"], default = 0) return(max_heads_run) })
执行后longest_runs应该是长度为2500的向量,每个元素对应一次重复试验的最长正面连续次数。
3. 计算样本均值与95%置信区间
基于正确的longest_runs,执行以下代码完成(b)部分要求:
# 计算样本均值X̄ x_bar <- mean(longest_runs) # 计算样本标准差 s <- sd(longest_runs) # 构建95%置信区间(大样本用正态近似) confidence_interval <- c( x_bar - qnorm(0.975) * s / sqrt(2500), x_bar + qnorm(0.975) * s / sqrt(2500) ) # 输出结果 cat("样本均值:", round(x_bar, 2), "\n") cat("95%置信区间:(", round(confidence_interval[1], 2), ",", round(confidence_interval[2], 2), ")\n")
内容的提问来源于stack exchange,提问作者Nolan C
相关产品推荐
相关产品推荐

