为什么这导致我的程序崩溃?

时间:2017-11-18 02:02:22

标签: r random statistics

我创建了以下用户定义函数,该函数使用Acceptance-Rejection方法生成随机变量。然而,每当它被调用时,我的程序继续进行并最终崩溃或者我必须强制退出。我经历了好几次。关于可能导致这种情况的任何想法?

我知道这可能不是写这篇文章的最佳方式(昨天是我第一次使用R)所以任何额外的提示都是奖金!

acceptReject <- function(){
  Z <- 0
  Y <- c(0,0)
  while(Y[2] < .5*(Y[1]-1)**2){
    U <- runif(2,0,1)
    Y <- log(U)
  }
  Z <- Y[1]
  U <- runif(1,0,1)
  if(U <= .5){
    Z <- abs(Z)
  }
  else{
    Z <- -abs(Z)
  }
  Z
}

1 个答案:

答案 0 :(得分:1)

你有一个无限循环。

如果您假设Y ~ log( [0,1] )(数学上),则表示它始终介于log(0)log(1)之间,分别等同于-Inf0 。 (底线,它总是小于或等于零。)

现在让我们来看看你的条件:.5*(Y[1]-1)**2。如果您知道Yc(-Inf,0),那么此公式的范围

.5*(c(-Inf,0)-1)**2
# [1] Inf 0.5

(这总是大于或等于0.5。)

由于Y始终为<= 0且公式始终为>= 0.5,因此您的条件在数学上始终为真。无限循环。