válidos swirl sistema recordar programacion parámetros para obten nombres muy los longitud lista lección las iris inténtalo importante gráficos graficación grafica extensa estadistica escalonada curso continuar columnas colores r

swirl - programacion estadistica r



Escriba la lista de marcos de datos para separar archivos CSV con lapply (3)

La pregunta lo dice todo: quiero tomar un objeto de lista lleno de data.frames y escribir cada data.frame en un archivo .csv separado donde el nombre del archivo .csv se corresponda con el nombre del objeto de la lista.

Aquí hay un ejemplo reproducible y el código que he escrito hasta ahora.

df <- data.frame( var1 = sample(1:10, 6, replace = TRUE) , var2 = sample(LETTERS[1:2], 6, replace = TRUE) , theday = c(1,1,2,2,3,3) ) df.daily <- split(df, df$theday) #Split into separate days lapply(df.daily, function(x){write.table(x, file = paste(names(x), ".csv", sep = ""), row.names = FALSE, sep = ",")})

Y aquí está la parte superior del mensaje de error que R escupe

Error: Results must have one or more dimensions. In addition: Warning messages: 1: In if (file == "") file <- stdout() else if (is.character(file)) { : the condition has length > 1 and only the first element will be used

¿Que me estoy perdiendo aqui?



Prueba esto:

sapply(names(df.daily), function (x) write.table(df.daily[[x]], file=paste(x, "txt", sep=".") ) )

Debería ver los nombres ("1", "2", "3") escupidos uno por uno, pero los NULL son la evidencia de que el efecto secundario de escribir en los archivos de disco se realizó. (Editar: cambiado [] a [[]].)


Un par de cosas:

laply realiza operaciones en una lista. Lo que estás buscando es d_ply . Y no tienes que romperlo durante el día, puedes dejar que plyr haga eso por ti. Además, no usaría los nombres (x), ya que devuelve todos los nombres de columna de un data.frame.

d_ply(df, .(theday), function(x) write.csv(x, file=paste(x$theday,".csv",sep=""),row.names=F))