Me he encontrado en la necesidad de actualizar uno o dos objetos de datos en un archivo Rdata creado previamente usando save
. Si no tengo cuidado de cargar el archivo, puedo olvidar volver a guardar algunos objetos en el archivo. Como ejemplo, estoy trabajando en un paquete con algunos objetos almacenados en sysdata.rda
(tablas de búsqueda para uso interno que no deseo exportar) y solo quiero preocuparme por actualizar objetos individuales.Actualización de un archivo Rdata existente
No he podido averiguar si hay una forma estándar de hacerlo, así que creé mi propia función.
resave <- function (..., list = character(), file = stop("'file' must be specified")) {
# create a staging environment to load the existing R objects
stage <- new.env()
load(file, envir=stage)
# get the list of objects to be "resaved"
names <- as.character(substitute(list(...)))[-1L]
list <- c(list, names)
# copy the objects to the staging environment
lapply(list, function(obj) assign(obj, get(obj), stage))
# save everything in the staging environment
save(list=ls(stage, all.names=TRUE), file=file)
}
Parece exagerado. ¿Hay una forma mejor/más fácil de hacer esto?
Como un aparte, ¿estoy en lo cierto al suponer que un nuevo entorno creado en el ámbito de una función se destruye después de la llamada a la función?
Hace uno (o al menos yo :-)) se pregunta por qué 'save' no tiene una opción de" agregar ". Preguntaré a r-help y volveré aquí si hay una respuesta útil. –
Ok, miré: https://stat.ethz.ch/pipermail/r-help/2006-March/101259.html da básicamente la misma sugerencia que la respuesta @flodel proporcionada. Personalmente, me gustaría ver esto doblado a la función base 'save' como una opción de" append = T ", pero no es un gran problema. –
He usado 'as.character (sustituto (list (...))) [- 1L]' (copiando desde 'save'). Al mirar la respuesta de la lista de correo, se usa 'deparse' en lugar de' as.character'. ¿Cuáles son los pros/contras de los dos enfoques? – seancarmody