добавление элементов в вектор в R - PullRequest
0 голосов
/ 15 ноября 2018

Я пытаюсь создать функцию, которая имитирует бросание кости, n раз, вычисляет минимум результата игры в кости в каждом броске, а затем вычисляет среднее значение минимума и сохраняет значения в векторе.

mindice = function(n = 10, m = 3)
{
   v <- vector
   for(i in 1:10)
   {
      minima= numeric(n)
      for(i in 1:n)
      {
          minima[i] = min(sample(6,m,replace=T))
      }
      v[i] = mean(minima)
   }
v
}

Я вызываю функцию следующим образом: mindice (), и вывод: Ошибка в v [i] <- среднее значение (минимум): объект типа 'замыкание' не может быть поднабором </p>

любая помощь будет оценена

Ответы [ 2 ]

0 голосов
/ 15 ноября 2018

Комментарий об использовании v = vector() вместо v = vector должен решить проблему так, как вы написали функцию.Если вы заинтересованы в более R-подобном способе выполнения этой функции, попробуйте следующее:

mindice2 = function(n = 10, m = 3) {
  rolls = sample(6, size = m * n, replace = TRUE)
  rolls = matrix(rolls, nrow = m)
  minima = apply(rolls, MARGIN = 2, FUN = min)
  cum_mean = cumsum(minima) / seq_along(minima)
  return(cum_mean)
}

Вместо того, чтобы производить выборку каждого рулона отдельно, мы делаем все рулоны одновременно (более эффективно), а затемпоместите их в матрицу, где каждый столбец представляет собой бросок кубика m.Затем мы можем использовать apply, чтобы найти минимумы, и cumsum, чтобы вычислить средний минимум после каждого броска.

0 голосов
/ 15 ноября 2018

Я не знаю, соответствует ли это вашим ожиданиям.Эта функция возвращает как вектор для минимума за рулон, так и их среднее значение

mindice <- function(n = 10, m = 3)
  {
  minima <- vector("numeric")
  for(i in 1:n){
  minima = c(minima, min(sample(6,m,replace=T)))
  }
  list(minimum_values=minima,
       mean_minima=mean(minima))
  }
mindice()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...