2011-01-13 14 views
25

Estoy aplicando repetidamente una función para leer y procesar un grupo de archivos csv. Cada vez que se ejecuta, la función crea un marco de datos (this.csv.data) y usa guardar() para escribirlo en un archivo .RData con un nombre único. El problema es que más adelante cuando leo estos archivos .RData usando load(), los nombres de las variables cargadas no son únicos, porque cada uno se carga con el nombre this.csv.data ....cómo guardar() con un nombre de variable particular

Me gustaría guardarlos con etiquetas únicas para que salgan correctamente nombrados cuando los cargue(). Creé el siguiente código para ilustrar.

this.csv.data = list(data=c(1:9), unique_tag = "some_unique_tag") 
assign(this.csv.data$unique_tag,this.csv.data$data) 
# I want to save the data, 
# with variable name of <unique_tag>, 
# at a file named <unique_tag>.dat 
saved_file_name <- paste(this.csv.data$unique_tag,"RData",sep=".") 
save(get(this.csv.data$unique_tag), saved_file_name) 

pero la última línea muestra

"Error in save(get(this_unique_tag), file = data_tag) : 
    object ‘get(this_unique_tag)’ not found" 

a pesar de que las siguientes declaraciones de los datos que acaba de finos:

get(this.csv.data$unique_tag) 
+0

Creo que también podría echar un vistazo al argumento 'envir' en' load() 'para conservar los nombres originales de las columnas si son importantes. Si no necesita procesar varios archivos a la vez, ¿no podría 'rm()' el objeto después de su análisis antes de pasar al siguiente archivo? – Chase

+0

@Chase, los nombres de columna todavía parecen estar bien, son los nombres duplicados de los dataframes creados que fueron el problema. A la larga, espero unir estos marcos de datos en uno grande y, como sugieres, puede ser que no los necesite más de uno a la vez. –

Respuesta

28

sólo el nombre de los argumentos que utiliza. Con el código de las siguientes obras bien:

save(list = this.csv.data$unique_tag, file=saved_file_name) 
+0

"funciona" porque no devuelve un error, pero cuando cargo (saved_file_name) crea una variable llamada "whattosave" en lugar de "unique_tag" Después de cargar diez archivos, solo tendría el último "whattosave" en su lugar de diez variables únicas ... –

+0

@jonw - lo siento, fui demasiado distraído. Edité mi respuesta, ¡espero que realmente funcione! – daroczig

+0

Eso es todo, gracias! –

23

Mi preferencia es para evitar el nombre del archivo rdata de la carga:

obj = local(get(load('myfile.RData'))) 

esta manera se puede cargar varios archivos rdata y nombrar los objetos lo que desea, o almacenarlos en una lista, etc.

+0

¡Increíble! gracias por esto. –

+0

Sería bueno explicar qué hacen 'local' y' get'. –

10

Realmente debería usar saveRDS/readRDS para serializar sus objetos. guardar y cargar son para guardar entornos completos.

saveRDS(this.csv.data, saved_file_name) 
# later 
mydata <- readRDS(saved_file_name) 
Cuestiones relacionadas