es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Bucle anidado con repetir.

Tengo esta función de bucle

item <- function(item, iteration) {
  nrItem <- 0
  OKItem <- 0
  nrIteration <- 0
  repeat {
    nrIteration <- nrIteration + 1
    repeat {
      nrItem <- nrItem + 1
      A <- sample(c(0:1), size=1)
      OKItem <- OKItem + A
      if (nrItem == item) { 
        break
      }
    }
    return(OKItem)
    if (nrIteration == iteration){
      break
    }
  }
}

Me gustaría iterar sobre los elementos y contar el número de elementos OK (elementos que obtienen un 1 en la iteración) y hacerlo un número determinado de veces. La salida debería ser el número de elementos OK (aproximadamente la mitad de los elementos deberían ser OK al final).

Pero solo obtengo la primera iteración.

Ejemplo

item(10,3)
[1] 6

Pero me gustaría obtener algo como esto

item(10,3)
[1] 6
[2] 5
[3] 5
Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Para iterar sobre elementos y contar el número de elementos OK (elementos que obtienen un 1 en la iteración) durante el número deseado de iteraciones, puedes modificar la función de bucle dada de la siguiente manera:

    item <- function(item, iteration) {
      OK_list <- numeric(iteration) # vector vacío para almacenar los resultados
      iteration_count <- 0 # contador de número de iteraciones realizadas
      repeat {
        nrItem <- 0 # contador de número de elementos generados
        OKItem <- 0 # contador de número de elementos OK generados
        repeat {
          nrItem <- nrItem + 1
          A <- sample(c(0:1), size=1)
          OKItem <- OKItem + A
          if (nrItem == item) { 
            break
          }
        }
        OK_list[iteration_count+1] <- OKItem # almacenar número de elementos OK para la iteración actual
        iteration_count <- iteration_count + 1 # incrementar contador de iteración
        if (iteration_count == iteration){
          break
        }
      }
      return(OK_list)
    }
    

    Aquí, se crea un vector OK_list para almacenar el número de elementos OK para cada iteración. Se utiliza un contador iteration_count para realizar un seguimiento del número de iteraciones realizadas, el cual se incrementa después de que cada iteración se completa. El número de elementos OK para la iteración actual se almacena en OK_list utilizando iteration_count para determinar la ubicación adecuada en el vector.

    Para obtener resultados aproximados donde la mitad de los elementos sean OK, puedes llamar a la función con item = 2*n e iteration = m, donde n es el número deseado de elementos y m es el número de iteraciones. Por ejemplo:

    item(10, 3)
    [1] 5 5 5
    

    Esto devuelve un vector de longitud iteration con el número de elementos OK para cada iteración. Ten en cuenta que el número exacto de elementos OK puede no ser exactamente la mitad debido a la aleatoriedad de la función.

Comments are closed.