Как сделать функцию R, которая зацикливается на два списка - PullRequest
0 голосов
/ 20 октября 2018

У меня есть событие A , которое срабатывает, когда большинство бросков монет в серии бросков выпадают из головы.У меня несправедливая монета, и я хотел бы увидеть, как вероятность A изменяется с изменением количества бросков и вероятности каждого броска.

Это моя функция, предполагающая 3tosses

n <- 3
#victory requires majority of tosses heads
#tosses only occur in odd intervals
k <- seq(n/2+.5,n)

victory <- function(n,k,p){
  for (i in p) {
    x <- 0
    for (i in k) {
      x <- x + choose(n, k) * p^k * (1-p)^(n-k)
    } 
    z <- x
    } 
  return(z)
}


p <- seq(0,1,.1)
victory(n,k,p)

Я надеюсь, что функция victory() будет:

  1. найти вероятность каждого из результатов, где большинство бросков являются головами, учитывая конкретное значение p
  2. суммируйте эти вероятности и добавьте их к вектору z
  3. вернитесь и сделайте то же самое с другой вероятностью p

Я проверил это с n <- 3, k <- c(2,3)и p <- (.5,.75) и выход составил 0,75000, 0,84375.Я знаю, что результат должен был быть 0,625, 0,0984375.

1 Ответ

0 голосов
/ 22 октября 2018

Я не смог получить именно тот результат, который вы хотели, но, возможно, смогу немного помочь вам.

При зацикливании в R вектор, через который вы зацикливаетесь, остается неизменным, и значение, которое вы используете для зацикливания изменений.Например, посмотрите на различия в этих циклах:

test <- seq(0,1,length.out = 5)

for ( i in test){
  print(test)
}

for ( i in test){
  print(i)
}

for ( i in 1:length(test)){
  print(test[i])
}

при выполнении итерации сначала вы устанавливаете i для первого числа в p, затем для первого числа в k и затем используетенеизмененные векторы.

Вы также присваиваете z в первом цикле p, а затем записываете его во втором цикле.

Попробуйте использовать приведенное ниже - я все еще не получаю ответ, который вы говоритено это может помочь вам найти причину ошибки (распечатка по пути или использование debug(victory) также может быть полезным

victory <- function(n,k,p){
  z <-list()
  for (i in 1:length(p)) {
    x <- 0
    for (j in 1:length(k)) {
      x <- x + choose(n, k[j]) * p[i]^k[j] * (1-p[i])^(n-k[j])
    } 
    z[i] <- x
  } 
  return(z)
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...