2012-06-18 22 views
8

Eventuali duplicati:
how to save() with a particular variable nameSalva oggetto con nome variabile con oggetto

Mi chiedo che cosa un modo semplice è quello di salvare un oggetto in R, utilizzando una variabile objectName con la nome dell'oggetto da salvare. Voglio questo per salvare facilmente gli oggetti, con il loro nome nel nome del file.

Ho provato a utilizzare get, ma non sono riuscito a salvare l'oggetto con il suo nome oggetto originale.

Esempio:

Se ho l'oggetto chiamato "temp", che voglio salvare nella directory "datadir". Inserisco il nome dell'oggetto nella variabile "objectName".

Tentativo 1:

objectName<-"temp" 
save(get(objectName), file=paste(dataDir, objectName, ".RData", sep="")) 
load(paste(dataDir, objectName, ".RData", sep="")) 

Questo non ha funzionato, perché R cerca di salvare un oggetto chiamato get(objectName), anziché il risultato di questa chiamata. Così ho provato la seguente:

Tentativo 2:

objectName<-"temp" 
object<-get(objectName) 
save(object, file=paste(dataDir, objectName, ".RData", sep="")) 
load(paste(dataDir, objectName, ".RData", sep="")) 

Questo, ovviamente, non ha funzionato, perché R salva l'oggetto con nome "oggetto", e non con il nome "temp". Dopo aver caricato ho una copia di "oggetto", invece di "temp". (Sì, con lo stesso contenuto ... ma non è quello che voglio :)). Quindi ho pensato che dovrebbe essere qualcosa con i puntatori. Così provato quanto segue:

Tentativo 3:

objectName<-"temp" 
object<<-get(objectName) 
save(object, file=paste(dataDir, objectName, ".RData", sep="")) 
load(paste(dataDir, objectName, ".RData", sep="")) 

stesso risultato tentativo 2. Ma io non sono sicuro che sto facendo quello che penso che sto facendo.

Qual è la soluzione per questo?

risposta

12

Prova save(list=objectName, file=paste(objectName, '.Rdata', sep='')).

la chiave è che l'argomento list a save prende una lista di stringhe di caratteri che sono i nomi degli oggetti da salvare (piuttosto che gli oggetti reali passati attraverso ...).

+0

Questo è esattamente quello di cui avevo bisogno, grazie! – FBE

+1

Puoi anche usare 'paste0 (objectName, '.RData')', che ti farà risparmiare un paio di colpi. –

1

Ho trovato i tuoi esempi difficili da capire, ma posso pensare a due possibilità di ciò che desideri. O vuoi che il nome del file sia salvato come objectName.RData o temp.RData. Ecco come fare entrambe le cose:

objectName<-"temp" 

# This saves the object as "temp.RData" 
save(objectName, file=paste(dataDir, objectName, ".RData", sep="")) 
# Loading it will bring it back with the name objectName, and the value temp 
load(paste(dataDir, 'temp', '.RData', sep='')) 

# This saves the object as "objectName.RData" 
save(objectName, file=paste(dataDir, deparse(substitute(objectName)), ".RData", sep="")) 
# Loading it will bring it back with the name objectName, and the value temp 
load(paste(dataDir, 'objectName', '.RData', sep='')) 

Tutti i vostri tentativi di restituire un errore, perché hai chiamato il get in modo non corretto. Avrebbe dovuto essere get('objectName'), ma se ci pensate, ciò vi procurerebbe esattamente la stessa cosa di objectName.

+0

Hmm ... Penso che i miei esempi non siano abbastanza chiari. Non è che voglio salvare l'oggetto "ObjectName", ma l'oggetto chiamato "temp".Per esempio; "temp" è un 'data.frame' che voglio salvare. Quindi voglio solo fare 'objectName <-" temp "' ed eseguire ad esempio la riga di codice 'save'. (La ragione è che devo solo cambiare il valore per il nome dell'oggetto, e tutto il codice di salvataggio e caricamento (e alcune altre cose) non hanno bisogno di cambiare) – FBE