';x';R中不是数字。R中的拒绝采样 rexp_k

';x';R中不是数字。R中的拒绝采样 rexp_k,r,numeric,R,Numeric,运行示例会给出一个列表输出。 这就是replicate()的标准输出 您会得到NULL值,因为您的函数并不总是返回值 由于您只返回数值和空值,而且您无论如何都需要unlist(),所以您可以只使用unlist(),就这样 rexp_k <- function(a,b) { y <- runif(1) u <- runif(1) a <- 2.5 b <- 3.5 f <- (y^(a-1))*((1-y)^(b-1)) g <-

运行示例会给出一个列表输出。 这就是
replicate()
的标准输出

您会得到
NULL
值,因为您的函数并不总是返回值

由于您只返回数值和空值,而且您无论如何都需要
unlist()
,所以您可以只使用
unlist()
,就这样

rexp_k <- function(a,b) {
  y <- runif(1)
  u <- runif(1)
  a <- 2.5
  b <- 3.5
  f <- (y^(a-1))*((1-y)^(b-1))
  g <- dunif(y)
  M <- ((a-1)/(a+b-2))^(a-1)*(1-((a-1)/(a+b-2)))^(b-1)
  if (M*u <= f/g) {
    return (y)
  }
}

a <- 2.5
b <- 3.5

beta_samples <- replicate(10, rexp_k(a,b))    
hist(beta_samples, probability = T)
unlist()
之后,列表中的空值将被删除。 如果它们是
NA
或字符值,则不会出现这种情况,但对您来说,它会起作用

> beta_samples
[[1]]
[1] 0.2615192

[[2]]
[1] 0.5856312

[[3]]
[1] 0.4794066

[[4]]
NULL

[[5]]
[1] 0.3697637

[[6]]
NULL

[[7]]
[1] 0.5003103

[[8]]
NULL

[[9]]
NULL

[[10]]
NULL
你可以用这些画出你的直方图

> unlist(beta_samples)
[1] 0.2615192 0.5856312 0.4794066 0.3697637 0.5003103

也许您想要
hist(未列出(beta_样本),概率=T)
?因为
beta_samples
是一个列表,因为您的函数并不总是返回向量,所以空值包含在输出中。不确定你想要什么样的行为。
hist(unlist(beta_samples), probability = T)