«х» не является числовым в R. Отбор проб в R - PullRequest
0 голосов
/ 08 мая 2018
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)

Таким образом, я получаю сообщение о том, что x не является числовым, когда я пытаюсь построить гистограмму в последней строке.я пытаюсь сделать выборку отклонения в R.

1 Ответ

0 голосов
/ 08 мая 2018

Запуск вашего примера дает вывод списка. Это то, что стандартный вывод replicate().

Вы получаете NULL значения, потому что ваша функция не всегда возвращает значение.

Поскольку вы возвращаете только числовые значения и значения NULL, а поскольку вам все равно нужно unlist(), вы можете просто использовать unlist() и все.

> 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() значения NULL в списках удаляются. Это было бы не так, если бы они были NA или значениями символов, но для вас это подойдет.

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

И вы можете построить свою гистограмму с ними.

hist(unlist(beta_samples), probability = T)

Histogram output

...