Saltar al contenido

Llenar un marco de datos en R en un bucle

Recuerda que en las ciencias un problema casi siempre tiene varias soluciones, por lo tanto aquí enseñaremos lo más óptimo y mejor.

Solución:

Podrías hacerlo así:

 iterations = 10
 variables = 2

 output <- matrix(ncol=variables, nrow=iterations)

 for(i in 1:iterations)
  output[i,] <- runif(2)

 

 output

y luego convertirlo en un data.frame

 output <- data.frame(output)
 class(output)

que hace esto:

  1. crear una matriz con filas y columnas de acuerdo con el crecimiento esperado
  2. insertar 2 números aleatorios en la matriz
  3. convertir esto en un marco de datos después el bucle ha terminado.

A menudo es preferible evitar los bucles y utilizar funciones vectorizadas. Si eso no es posible, hay dos enfoques:

  1. Preasignar su data.frame. Esto no se recomienda porque la indexación es lenta para data.frames.
  2. Use otra estructura de datos en el ciclo y transfórmela en una data.frame después. A list es muy útil aquí.

Ejemplo para ilustrar el enfoque general:

mylist <- list() #create an empty list

for (i in 1:5) 
  vec <- numeric(5) #preallocate a numeric vector
  for (j in 1:5)  #fill the vector
    vec[j] <- i^j 
  
  mylist[[i]] <- vec #put all vectors in the list

df <- do.call("rbind",mylist) #combine all vectors into a matrix

En este ejemplo no es necesario utilizar un listpuede preasignar un matrix. Sin embargo, si no sabe cuántas iteraciones necesitará su ciclo, debe usar un list.

Finalmente, aquí hay una alternativa vectorizada al bucle de ejemplo:

outer(1:5,1:5,function(i,j) i^j)

Como ves es más sencillo y también más eficiente.

esto también funciona

df = NULL
for (k in 1:10)
    
       x = 1
       y = 2
       z = 3
       df = rbind(df, data.frame(x,y,z))
     

la salida se verá así

df #enter

x y z #col names
1 2 3

Al final de la artículo puedes encontrar los informes de otros programadores, tú también puedes dejar el tuyo si dominas el tema.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *