以前にを使用して作成されたRdataファイルの1つまたは2つのデータオブジェクトを更新する必要があることに気づきました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)
}
しかし、それはやり過ぎのようです。これを行うためのより良い/より簡単な方法はありますか?
余談ですが、関数のスコープ内に作成された新しい環境が関数呼び出しの後に破棄されると仮定するのは正しいですか?