Ich habe festgestellt, dass ich ein oder zwei Datenobjekte in einer Rdata-Datei aktualisieren muss, die zuvor mit save
erstellt wurde. Wenn ich nicht vorsichtig bin, die Datei zu laden, kann ich vergessen, einige Objekte in der Datei erneut zu speichern. Als Beispiel arbeite ich an einem Paket mit einigen Objekten, die in sysdata.rda
gespeichert sind (Nachschlagetabellen für den internen Gebrauch, die ich nicht exportieren möchte) und möchte nur um das Aktualisieren einzelner Objekte kümmern.Aktualisieren einer vorhandenen Rdata-Datei
Ich habe es nicht geschafft, herauszufinden, ob es eine Standardmethode gibt, dies zu tun, also habe ich meine eigene Funktion erstellt.
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)
}
Es scheint jedoch wie Overkill. Gibt es einen besseren/einfacheren Weg dies zu tun?
Nebenbei, bin ich richtig in der Annahme, dass eine neue Umgebung, die im Rahmen einer Funktion erstellt wird, nach dem Funktionsaufruf zerstört wird?
Macht einen (oder zumindest mich :-)) wundern, warum 'save' keine" append "-Option hat. Ich werde r-help fragen und zurückkommen, wenn es eine nützliche Antwort gibt. –
Ok, ich habe geschaut: https://stat.ethz.ch/pipermail/r-help/2006-March/101259.html gibt im Prinzip den gleichen Vorschlag wie die Antwort @flodel zur Verfügung gestellt. Persönlich würde ich gerne sehen, dass dies in der Basis "Speichern" -Funktion als "append = T" -Option gefaltet ist, aber es ist keine große Sache. –
Ich habe 'as.character (substitute (liste (...))) [- 1L] '(Kopieren von' save') verwendet. Betrachtet man die Antwort der Mailing-Liste, wird "deparse" anstelle von "as.character" verwendet. Was sind die Vor-/Nachteile der beiden Ansätze? – seancarmody