在R中,我从均匀分布中生成随机数,然后使用Marsaglia和Bray的方法将这些变换为随机正态偏差。此过程中的一个步骤是将u[1]^2 + u[2]^2
转换为值w
。只有w
。
w < 1
如果数字大于1,我可以写什么拒绝?由于我在while
循环中执行此操作,因此我不想在索引中为已拒绝的值添加计数。感谢。
答案 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