如何用R语言table函数统计Craps游戏各类结果出现次数
解决方法
你的问题出在每次循环都用单个变量x存储结果,前面的结果会被后面的覆盖,最后自然只剩最后一次的记录。要汇总所有N次游戏的结果,需要把x初始化为向量,每次循环将结果存入向量的对应位置。
修改后的代码
# Play the game many times win = 0; tie = 0; N = 10^4 # 初始化一个长度为N的字符型向量,用来存储每一次游戏的结果 x = character(N) for(j in 1:N){ points = sum(sample(1:6, 2, replace=T)) if(points == 7 | points == 11){ win = win + 1 x[j] = paste("natural winner", points) } else if(points == 2 | points == 3 | points == 12){ x[j] = paste("natural loser", points) } else { for(i in 1:20){ newroll = sum(sample(1:6, 2, replace=T)) if(newroll == points){ win = win + 1 x[j] = paste("points winner", points) break } else if(newroll == 7){ x[j] = paste("points loser", points) break } if(i == 20){ tie = tie + 1 x[j] = paste("20 Bullets Survivor", points) } # end if i==20 } # end i loop } # end else } # end j loop # 统计各类结果的出现次数 result_table = table(x) print(result_table) # 可选:转成数据框并计算概率,更接近示例格式 result_df = as.data.frame(result_table) colnames(result_df) = c("结果类型", "次数") result_df$概率 = result_df$次数 / N print(result_df)
关键说明
- 初始化
x = character(N):创建长度为N的字符型向量,预留空间存储每一次游戏的结果。 - 循环中用
x[j] = ...:把第j次游戏的结果存入向量对应位置,不会覆盖之前的记录。 - 最后用
table(x)就能统计所有结果的出现次数,转成数据框后还能计算概率,和你提供的骰子概率表示例格式更匹配。
内容的提问来源于stack exchange,提问作者IUPUI_Student
相关产品推荐
相关产品推荐

