【发布时间】:2016-09-25 04:50:28
【问题描述】:
我的代码的目的是找出至少有 2 个人生日相同的概率为 50% 的人数。
source('colMatches.r')
all_npeople = 1:300
days = 1:365
ntrials = 1000
sizematch = 2
N = length(all_npeople)
counter = 1
pmean = rep(0,N)
while (pmean[counter] <= 0.5)
{
npeople = all_npeople[counter]
x = matrix(sample(days, npeople*ntrials, replace=TRUE),nrow=npeople,
ncol=ntrials)
w = colMatches(x, sizematch)
pmean[counter] = mean(w)
counter = counter + 1
}
s3 = toString(pmean[counter])
s2 = toString(counter)
s1 = "The smallest value of n for which the probability of a match is at least 0.5 is equal to "
s4 = " (the test p value is "
s5 = "). This means when you have "
s6 = " people in a room the probability that two of them have the same birthday is 50%."
paste(s1, s2, s4, s3, s5, s2, s6, sep="")
当我运行该代码时,我得到“匹配概率至少为 0.5 的 n 的最小值等于 301(测试 p 值为 NA)。这意味着当您在一个房间里有 301 人时他们两个生日相同的概率是50%。”因此,由于某种原因,while 语句无法正常工作。它一直循环通过 all_npeople,即使它应该在 pmean[counter] 不再小于或等于 0.5 时停止。
我知道 pmean 正在正确更新,因为当我之后测试它时 pmean[50] = 0.971。所以这个列表确实是正确的,但 while 循环仍然不会结束。
*colmatches 是一个函数,它根据 sizematch 确定列是否具有一定数量的匹配项。因此,在这种情况下,它正在查看在 x 中定义的矩阵,并为具有至少 2 个相似值的每一列列出 1,对于没有匹配的每一列列出 0。
【问题讨论】:
-
要回答您关于为什么 while 循环没有正确退出的问题是您的 counter
标签: r loops while-loop break