Понимание кода об выборке обратного преобразования R - PullRequest
0 голосов
/ 24 марта 2019

Я пытаюсь понять следующий код о дискретизации обратного преобразования (дискретный пример)

    discrete.inv.transform.sample <- function( p.vec ) {
  U  <- runif(1)
  if(U <= p.vec[1]){
    return(1)
  }
  for(state in 2:length(p.vec)) {
    if(sum(p.vec[1:(state-1)]) < U && U <= sum(p.vec[1:state]) ) {
      return(state)
    }
  }
}

num.samples <- 1000
p.vec        <- c(0.1, 0.4, 0.2, 0.3)
names(p.vec) <- 1:4
samples     <- numeric(num.samples)
for(i in seq_len(num.samples) ) {
  samples[i] <- discrete.inv.transform.sample(p.vec)
}
barplot(p.vec, main='True Probability Mass Function')

Мой первый вопрос о функции discrete.inv.transform.sample(p.vec) в первой части return(1), где это 1 значение при возврате?

А во второй части, return(state), где это state выделено?

  • Почему эта строка names(p.vec)<-1:4 для?

  • Что означает seq_len?

  • Почему samples[i] больше не используется в коде?

Я думаю, что должна быть отдельная линия sample

Может кто-нибудь объяснить, пожалуйста?

Заранее спасибо

1 Ответ

2 голосов
/ 25 марта 2019

Похоже, вам нужно провести фундаментальные исследования по R и программированию в целом.Вот краткие ответы на ваши простые вопросы, но, пожалуйста, читайте дальше, чтобы получить более широкий совет.

  • Где находится значение 1 при возврате?Везде, где это назначено.Здесь, а именно в samples[i] для того, какая i эта ветвь достигнута.
  • Где это state выделено?В строке for(state in 2:length(p.vec))
  • Почему эта строка names(p.vec)<-1:4 для?Хороший вопрос.names()<- просто присваивает имена объекту, и я не уверен, почему в вашем контексте полезно иметь имена, которые равны векторным индексам, хотя я мог бы себе представить, что это так в некоторых контекстах.
  • Что seq_len означает?seq_len(x) создает целочисленный вектор со всеми числами от 1 до x включительно.См. help("seq_len")
  • Почему samples[i] больше не используется в коде?Потому что это полезно только в цикле for.

Все это указывает на более серьезную проблему: вы не понимаете основы R. Мы все начали там, но это значит, что вам нужно прочитатьнекоторая базовая информация и работа через некоторые основные учебники.RStudio предоставляет некоторые ресурсы для изучения здесь .

...