Aktualisieren von eingebetteten Daten, z. B. sysdata.rda

9

Meine letzte Einreichung bei CRAN wurde zurückgeworfen, weil ich Aufgaben in der globalen Umgebung habe, die jetzt verpönt ist.

Ich habe einen eingebetteten Datensatz (sysdata.rda), der Konfigurationsparameter basierend auf dem Status (wie in den USA) des Benutzers enthält. Ich wollte, dass dieser eingebettete Datensatz aktualisierbar ist, wenn ein neuer Benutzer das Programm verwendet. Ich habe diese Daten in der Anfangsfunktion, die der Benutzer verwendet, zuvor aktualisiert und dem Benutzer über die globale Zuordnung zugänglich gemacht.

Ich habe Mühe herauszufinden, wie ich diese eingebetteten Daten aktualisieren und zu den Standarddaten machen kann, die der Benutzer für den Rest der Sitzung verwendet.

Früher habe ich die Daten in / data untergebracht und kürzlich auf /R/sysdata.rda umgestellt, da es für dieses Gebietsschema besser geeignet schien. Jetzt bin ich mir nicht so sicher.

Jede Hilfe, die sehr geschätzt wird

    
dbetebenner 13.01.2013, 10:35
quelle

2 Antworten

4

Der Schlüssel besteht darin, die Zuweisung in einer anderen Umgebung als der globalen Umgebung vorzunehmen. Es gibt zwei grundlegende Techniken, die local() und <<- verwenden oder explizit eine neue Umgebung erstellen:

Das Arbeiten mit einer expliziten Umgebung ist einfach: Erstellen Sie die Umgebung und ordnen Sie sie dann wie eine Liste zu:

%Vor%

Die Verwendung von local() ist etwas komplexer und erfordert einige Tricks mit <<-

%Vor%

Weitere Informationen dazu, wie <<- funktioniert, finden Sie unter Ссылка im Abschnitt "Zuweisung: Namen an Werte binden "Abschnitt.

    
hadley 13.01.2013, 20:21
quelle
1

Warum haben Sie keine foo.R Datei in /data , die die Daten lädt und aktualisiert, wenn der Benutzer data(foo) aufruft? Dies ist eine der zulässigen Optionen für /data , aber beachten Sie Folgendes aus Writing R Extensions

  

Beachten Sie, dass der R-Code "autark" sein sollte und keine zusätzlichen Funktionen des Pakets verwenden darf, damit die Datendatei auch verwendet werden kann, ohne dass das Paket geladen werden muss.

Wenn Sie mit dieser Einschränkung leben können, dann könnte data(foo) die Daten laden, sie aktualisieren und sicherstellen, dass sie sich in einem bestimmten benannten Objekt befinden, auf das Sie dann in Ihren Funktionen verweisen.

    
Gavin Simpson 13.01.2013 11:42
quelle

Tags und Links