如何拒绝R中不符合标准的随机生成的数字

时间:2015-09-29 08:33:30

标签: r random while-loop normal-distribution

在R中,我从均匀分布中生成随机数,然后使用Marsaglia和Bray的方法将这些变换为随机正态偏差。此过程中的一个步骤是将u[1]^2 + u[2]^2转换为值w。只有w

才能接受此w < 1

如果数字大于1,我可以写什么拒绝?由于我在while循环中执行此操作,因此我不想在索引中为已拒绝的值添加计数。感谢。

1 个答案:

答案 0 :(得分:1)

您可以做的是使用生成2数字的递归函数。它比使用while循环更像是一种函数式编程方法:

gen = function(n=2)
{
    if(n==0) return(numeric(0))
    x = runif(1)
    y = runif(1)
    w = x**2 + y **2
    m_defect = sum(w>1)
    c(x,y,gen(m_defect))
}

#> gen()
#[1] 0.3429797 0.5950654
#> sum(gen()**2)
#[1] 0.3164518