【问题标题】:How to generate positive numbers using repeat in R如何在 R 中使用重复生成正数
【发布时间】:2013-01-25 21:14:20
【问题描述】:

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

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

【问题讨论】:

  • 您想要一个平均值为 2 且标准差为 2 但没有负数的正态分布?这听起来不再像正态分布了......为什么不x &lt;- rnorm(50, 2, 2); x[x &gt; 0][1:5] 或者如果你真的不关心分布:abs(rnorm(5, 2, 2))
  • 我对分发不感兴趣。这只是一个示例,以便我可以将代码调整为我的项目。
  • 也许我误解了你想要做什么,但你的代码工作正常。您最终会得到一个没有负值的变量 x。 (虽然 for 循环是不必要的,但 print(x) 并不表示您的最终结果,这可能会让您感到困惑。
  • @DunderChief,我仍然看到负值。它只产生正值吗?如果有,可以在这里分享一下吗?
  • 我猜问题出在forprint。我得到了我想要的。干杯:)

标签: r function repeat


【解决方案1】:

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

repeat {
    x <- rnorm(5,2,2)
    if ((length(which(x<0)))==0){break}
}
x

【讨论】:

    【解决方案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)
    }
    

    【讨论】:

    • 谢谢。它有效,但我需要使用repeatşf 来完成。如果可能的话,您可以使用repeatif 来做到这一点吗?我将在我的项目中使用此代码。所以,正态分布只是举例。
    • 这是作业吗?顺便说一句,我相信你可以很容易地将while 替换为repeatif...
    • 是的。我知道我犯了一个愚蠢的错误,但无法弄清楚它是什么
    • 完成了,伙计们。谢谢一百万:)
    猜你喜欢
    • 2012-10-10
    • 2011-04-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多