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.

Tener un bucle for en R que omita algunos valores.

Tengo el siguiente problema en el que no puedo encontrar la solución:
– Tengo un marco de datos que incluye N tamaños de muestra (llamado ‘size’ por ahora) que calculé en un bucle anterior.
– Hice un nuevo bucle y para cada valor de ‘size’ quiero calcular algunas cosas. Lo hice de la siguiente manera:

samplesize <- numeric(N)

for (i in 1:N){
 samplesize <- size[i,]

# Crear espacio de almacenamiento para los valores calculados
 store <- matrix(data = NA, nrow = samplesize, ncol = N)

# Obtener números aleatorios de una distribución normal N veces
 for (a in 1:N){
  store[,i] <- rnorm(n = samplesize, mean = avg, sd = stdvn)
 }
}

Como puedes ver, introduzco el valor actual de ‘size’ en el bucle para crear un espacio de almacenamiento y obtener algunos números aleatorios. Sin embargo, el problema es que algunos valores de ‘size’ son cero. Esto resulta en un error al crear ‘store’, ya que pregunto si quiere crear cero filas. Luego, también da un error al obtener el número aleatorio, ya que solicito un n de 0. Necesito agregar los números de ‘store’ a los valores calculados previamente, por lo que no es deseable convertir los ceros en unos, porque agregaría un valor adicional cuando en realidad debería ser cero. Creo que lo que quiero es que el bucle omita todos los valores de ‘size’ que sean cero. ¿Alguien tiene una solución sobre cómo hacerlo? ¡Muchas gracias de antemano!

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Una solución para omitir los valores de ‘size’ que son cero es utilizar una ‘sentencia if’ para verificar si el valor de ‘size’ es cero o no antes de entrar en el bucle interno para crear la matriz de almacenamiento y generar números aleatorios. Si el valor es cero, el bucle se saltará utilizando la función ‘next’. Aquí hay un código actualizado con la ‘sentencia if’:

    samplesize <- numeric(N)
    for (i in 1:N){
      samplesize <- size[i,]
      # Agregar una sentencia if para saltar el bucle si samplesize es cero
      if (samplesize == 0) {
        next
      }
    
      # Crear almacenamiento para los valores calculados
      store <- matrix(data = NA, nrow = samplesize, ncol = N)
    
      # Obtener números aleatorios de la distribución normal N veces
      for (a in 1:N){
        store[,i] <- rnorm(n = samplesize, mean = avg, sd = stdvn)
      }
      # Aquí puedes sumar los números de 'store' a los valores calculados previamente
    }
    

    En el código actualizado, si ‘samplesize’ es cero, el bucle se saltará utilizando la función ‘next’. Si ‘samplesize’ no es cero, se creará la matriz de almacenamiento y se generarán los números aleatorios.

Comments are closed.