2012-06-18 15 views
8

Duplicar posibles:
how to save() with a particular variable nameGuardar el objeto mediante la variable con el nombre del objeto

Me pregunto lo que es una forma fácil es guardar un objeto en R, usando una variable con el objectName nombre del objeto que se guardará Quiero que esto sea fácil de guardar objetos, con su nombre en el nombre del archivo.

Intenté usar get, pero no logré guardar el objeto con su nombre de objeto original.

Ejemplo:

Si tengo el objeto llamado "temp", que quiero guardar en el directorio "DataDir". Puse el nombre del objeto en la variable "objectName".

Intento 1:

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

Esto no funcionó, porque R trata de salvar un objeto llamado get(objectName), en lugar del resultado de esta llamada. Así que he intentado lo siguiente:

Intento 2:

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

Obviamente, esto no funcionó, porque R guarda el objeto con el nombre de "objeto", y no con el nombre "Temp". Después de cargar, tengo una copia de "objeto", en lugar de "temperatura". (Sí, con los mismos contenidos ... pero eso no es lo que quiero :)). Así que pensé que debería ser algo con punteros. Así intentado el siguiente:

Intento 3:

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

mismo resultado que intento 2. Pero no estoy seguro de que estoy haciendo lo que creo que estoy haciendo.

¿Cuál es la solución para esto?

Respuesta

12

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

La clave es que el argumento list a save toma una lista de cadenas de caracteres que es el nombre de los objetos para ahorrar (en lugar de los objetos reales pasaron por ...).

+0

Esto es exactamente lo que necesitaba, ¡gracias! – FBE

+1

También puede usar 'paste0 (objectName, '.RData')', que le ahorrará un par de golpes. –

1

Encontré tus ejemplos difíciles de entender, pero puedo pensar en dos posibilidades de lo que quieres. O desea que el nombre de archivo se guarde como objectName.RData o temp.RData. Aquí es cómo hacer las dos cosas:

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='')) 

Todos sus intentos de devolver un error debido a que llamó la get incorrectamente. Debería haber sido get('objectName'), pero si lo piensas bien, obtendrás exactamente lo mismo que objectName.

+0

Hmm ... Creo que mis ejemplos no son lo suficientemente claros. No es que quiera guardar el objeto "ObjectName", sino el objeto llamado "temp".Por ejemplo; "temp" es un 'data.frame' que quiero guardar. Entonces solo quiero hacer 'objectName <-" temp "' y ejecutar, por ejemplo, la línea de código 'guardar'. (La razón es que solo tengo que cambiar el valor para el nombre del objeto, y todo el código de guardar y cargar (y algunas otras cosas) no necesita cambiar) – FBE

Cuestiones relacionadas