4 Stimmen

Wie man eine Variable speichert, die nicht durch rm (list=ls()) entfernt wird

Ich möchte eine Variable in R speichern, die nicht durch rm(list=ls()) entfernt wird.

Ich denke, es ist möglich, da beispielsweise installierte Funktionen und Daten aus Paketen nicht entfernt werden.

Bearbeitung: Eine Möglichkeit könnte sein, eine Umgebungsvariable nur für diese R-Sitzung festzulegen. Ich habe Sys.setenv(ENV_VAR = 1) versucht, aber Sys.getenv(ENV_VAR) gibt einen Fehler zurück.

(Ich bin auf Windows 32 bit, R 2.12.1)

7voto

Tommy Punkte 38569

Zuerst muss die Umgebungsvariable in Anführungszeichen gesetzt werden:

Sys.setenv(ENV_VAR = 1)
Sys.getenv("ENV_VAR")

Zweitens ist, wie Chase sagte, eine neue Umgebung der richtige Weg - aber Sie müssen sie auch anhängen:

e <- new.env()
e$foo <- 42
attach(e, name='myvars')
rm(list=ls()) # Alles in der globalen Umgebung entfernen
foo # Ist immer noch da!

...und um sie abzuhängen:

detach('myvars')

4voto

Chase Punkte 65180

Die richtige Antwort besteht darin, Ihre Variable in eine neue Umgebung zu setzen. Ein schneller und schmutziger Trick besteht darin, ein . vor der Variable anzufügen, damit sie nicht von ls() erfasst wird.

> x <- 1:10
> x
 [1]  1  2  3  4  5  6  7  8  9 10
> .x <- x
> ls()
[1] "x"
> rm(list = ls())
> ls()
character(0)
> .x
 [1]  1  2  3  4  5  6  7  8  9 10

2voto

James Punkte 63228

Eine weitere Option ist folgende:

# workspace beschäftigen
x<-1
y<-2
z<-3

> ls()
[1] "x" "y" "z"

# festlegen, was behalten werden soll
save<-"x"
# den Rest verwerfen
rm(list=ls()[!(ls()%in%save)])

> ls()
[1] "x"

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X