我发现自己需要更新以前使用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)
}
不过,这似乎有点矫枉过正。有没有更好/更简单的方法来做到这一点?
顺便说一句,我是否正确假设在函数范围内创建的新环境在函数调用后被销毁?