Я обнаружил, что мне нужно обновить один или два объекта данных в файле Rdata, который был создан ранее с помощью save
. Если я не буду загружать файл, я могу забыть повторно сохранить некоторые объекты в файле. В качестве примера я работаю над пакетом с некоторыми объектами, хранящимися в sysdata.rda
(справочные таблицы для внутреннего использования, которые я не хочу экспортировать), и хочу только беспокоиться об обновлении отдельных объектов.
Мне не удалось разобраться, если есть стандартный способ сделать это, поэтому создал свою собственную функцию.
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)
}
Однако это похоже на излишний. Есть ли лучший/более простой способ сделать это?
Как я уже сказал, правильно ли я предполагаю, что после вызова функции новая среда, созданная в рамках функции, будет уничтожена?