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.

R: crear múltiples dataframes usando un bucle for solo almacena el dataframe final en la lista.

Estoy intentando crear varios dataframes con nombres utilizando un bucle for. Una versión simplificada del código que estoy utilizando se muestra a continuación. Me gustaría mantener la estructura del bucle lo más similar posible, ya que se necesita para el análisis más complejo que estoy haciendo. El problema que tengo es que solo el último dataframe se guarda en la lista. Todos los demás elementos en la lista están vacíos. ¿Qué está causando este comportamiento y cómo puedo editar el código para solucionarlo?

dfs = list()
df.names = c("a", "b", "c")
for (i in length(df.names)) {
  df = data.frame()
  tmp = data.frame(x = 1, y = 2, z = 3)
  df = rbind(df,tmp)
  dfs[[i]] = df
}
names(dfs) = df.names
Tags:  , ,

Answer

  1. Avatar for davy.ai

    El problema está en la definición del bucle for. En la definición actual, i solamente toma el valor de length(df.names), que es 3. Esto significa que el bucle se ejecuta solamente una vez en lugar de tres veces. Para solucionar esto, cambia la definición del bucle a for (i in 1:length(df.names)) de manera que i tome los valores 1, 2 y 3. El código corregido se muestra a continuación:

    dfs = list()
    df.names = c("a", "b", "c")
    for (i in 1:length(df.names)) {
      df = data.frame()
      tmp = data.frame(x = 1, y = 2, z = 3)
      df = rbind(df,tmp)
      dfs[[i]] = df
    }
    names(dfs) = df.names
    

    Esto debería crear una lista de tres dataframes, cada uno con una fila que contiene los valores 1, 2 y 3 en columnas llamadas “x”, “y” y “z”. La lista debería tener los nombres “a”, “b” y “c” respectivamente.

Comments are closed.