2011-01-13 9 views
25

Sto ripetutamente applicando una funzione per leggere ed elaborare un mucchio di file CSV. Ogni volta che viene eseguita, la funzione crea un frame di dati (this.csv.data) e utilizza save() per scriverlo in un file .RData con un nome univoco. Il problema è, più tardi, quando leggo questi file .RData usando load(), i nomi delle variabili caricate non sono univoci, perché ognuno carica con il nome this.csv.data ....come salvare() con un nome di variabile particolare

Mi piacerebbe salvarli con tag unici in modo che escano correttamente nominati quando li carico(). Ho creato il seguente codice per illustrare.

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) 

ma l'ultima riga torna

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

anche se i seguenti restituisce i dati più che bene:

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

Penso che si potrebbe anche dare un'occhiata all'argomento 'envir' in' load() 'per mantenere i nomi delle colonne originali se sono importanti. Se non hai bisogno di elaborare più file contemporaneamente, non potresti 'rm()' l'oggetto dopo l'analisi prima di passare al file successivo? – Chase

+0

@Chase, i nomi delle colonne sembrano ancora venire bene, sono i nomi duplicati dei datafram creati che rappresentavano il problema. A lungo termine, prevedo di trasformare questi frame di dati in uno grande e, come suggerisci, potrebbe non averne bisogno più di uno alla volta. –

risposta

28

Proprio nome gli argomenti che si usa. Con il codice i seguenti lavori bene:

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

"funziona" nel senso che non restituisce un errore, ma quando carico (nome_file_scatato) crea una variabile chiamata "whattosave" invece di "unique_tag" Dopo aver caricato dieci file, avrei solo l'ultimo "whattosave" invece di dieci variabili uniche ... –

+0

@jonw - scusate ero troppo disattento. Ho modificato la mia risposta, spero che funzionerà davvero! – daroczig

+0

Ecco, grazie! –

23

La mia preferenza è quella di evitare il nome nel file RDATA del carico:

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

In questo modo è possibile caricare vari file RDATA e nominare gli oggetti qualunque cosa vuoi, o memorizzarli in una lista ecc.

+0

Incredibile! grazie per questo. –

+0

Sarebbe bello spiegare cosa 'local' e' get' do. –

10

Dovresti davvero usare saveRDS/readRDS per serializzare i tuoi oggetti. salvare e caricare per salvare interi ambienti.

saveRDS(this.csv.data, saved_file_name) 
# later 
mydata <- readRDS(saved_file_name) 
Problemi correlati