【问题标题】:Can't break out of while loop in R无法摆脱 R 中的 while 循环
【发布时间】: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


【解决方案1】:

我很欣赏你尝试编写这个问题,但 R 的美妙之处在于大部分工作都是为你完成的:

qbirthday(prob = 0.5, classes = 365, coincident = 2)
#answer is 23 people.

您可能还对以下内容感兴趣:

pbirthday(n, classes = 365, coincident = 2)

【讨论】:

  • 感谢您的回答!今天是我第一次尝试使用 R,不管是否有更简单的方法,我仍然担心我的 while 循环不起作用。我认为测试表达式有问题,但我不知道是什么。
【解决方案2】:

如果代码的目的只是定义至少有两个生日相同的概率大于 0.5 的人数,则可以用更简单的方式编写它:

# note that probability below is probability of NOT having same birthday

probability <- 1
people <- 1
days <- 365

while(probability >= 0.5){
    people <- people + 1
    probability <- probability * (days + 1 - people) / days
}

print(people)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-09-05
    • 2014-03-28
    • 2013-06-20
    • 1970-01-01
    • 2022-12-02
    • 1970-01-01
    相关资源
    最近更新 更多