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