Cuando guarda una variable en un archivo de datos R usando save
, se guarda con el nombre que tenía en la sesión que la guardó. Cuando luego voy a cargarlo desde otra sesión, se carga con el mismo nombre, que el script de carga no puede conocer. Este nombre podría sobrescribir una variable existente del mismo nombre en la sesión de carga. ¿Hay alguna manera de cargar de forma segura un objeto desde un archivo de datos en un nombre de variable especificado sin riesgo de golpear las variables existentes?
Ejemplo:
Guardar sesión:
x = 5
save(x, file="x.Rda")
Cargando sesión:
x = 7
load("x.Rda")
print(x) # This will print 5. Oops.
Cómo quiero que funcione:
x = 7
y = load_object_from_file("x.Rda")
print(x) # should print 7
print(y) # should print 5
r
variable-names
rdata
Ryan C. Thompson
fuente
fuente
saveRDS
yreadRDS
, en consecuencia, guardar y restaurar todos los atributos del objeto, incluidos los creados por una aplicación (víaattr
)? Traté de usar este enfoque en lugar desave
yload
, tratando de encontrar una solución para mi problema. Sin embargo, no parece ser el caso, a menos que esté haciendo algo mal: stackoverflow.com/questions/23701195/… .Yo uso lo siguiente:
fuente
Puede crear un nuevo entorno, cargar el archivo .rda en ese entorno y recuperar el objeto desde allí. Sin embargo, esto impone algunas restricciones: o sabe cuál es el nombre original de su objeto o solo hay un objeto guardado en el archivo.
Esta función devuelve un objeto cargado desde un archivo .rda proporcionado. Si hay más de un objeto en el archivo, se devuelve uno arbitrario.
fuente
new.env
realmente necesario? ¿La llamada de función en sí misma no proporciona un entorno temporal?También puedes probar algo como:
fuente
En caso de que alguien esté buscando hacer esto con un archivo fuente simple, en lugar de un archivo Rdata / RDS / Rda guardado, la solución es muy similar a la proporcionada por @Hong Ooi
Huellas dactilares:
Y en el archivo fuente independiente TestSourceFile.R
Nuevamente, esta solución solo funciona si hay exactamente un archivo, si hay más, entonces solo devolverá uno de ellos (probablemente el primero, pero eso no está garantizado).
fuente
Estoy ampliando la respuesta de @ricardo para permitir la selección de una variable específica si el
.Rdata
archivo contiene varias variables (ya que mis créditos son bajos para editar una respuesta). Agrega algunas líneas para leer la entrada del usuario después de enumerar las variables contenidas en el.Rdata
archivo.fuente
Archivo Rdata con un objeto
fuente