4

我写了下面的代码。目的是仅获得正数。所以,rnorm(5,2,2)也可以产生负数,但我希望它只产生正数。为此,我使用repeat了 in R,但它不能正常工作。你有什么建议来修复它?这是代码:

for (i in 1:5){
repeat{
x <- rnorm(5,2,2)
if ((length(which(x<0)))==0){break}
print(x)
}
}
4

2 回答 2

3

您的原始代码有效。您可能对不代表最终结果的 print(x) 感到困惑

repeat {
    x <- rnorm(5,2,2)
    if ((length(which(x<0)))==0){break}
}
x
于 2013-01-25T21:48:58.437 回答
2

好吧,我不确定你为什么这样做或者你想要达到什么,但是如果你想从(2,2)正态分布中迭代地采样 100 个值并重复直到所有值都是正的,你可以做一些事情像 :

v <- rnorm(100,2,2)
nb <- sum(v<0)
while (nb>0) {
  v[v<0] <- rnorm(nb,2,2)
  nb <- sum(v<0)
}
于 2013-01-25T21:22:53.597 回答