/ / Wie kann ich meinen R-Arbeitsbereich säubern, während bestimmte Objekte erhalten bleiben? - r, Statistiken

Wie kann ich meinen R-Arbeitsbereich säubern, während bestimmte Objekte erhalten bleiben? - r, Statistiken

Angenommen, ich mache mich mit einigen Daten herum, indem ich Vektoren miteinander verbinde, wie ich es an einem faulen Sonntagnachmittag nicht tue.

    x <- rnorm(25, mean = 65, sd = 10)
y <- rnorm(25, mean = 75, sd = 7)
z <- 1:25

dd <- data.frame(mscore = x, vscore = y, caseid = z)

Ich habe jetzt meinen neuen Datenrahmen ddwas wunderbar ist. Aber es gibt auch noch den Rückstand meiner früheren Scheiben und Würfel:

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

Was ist ein einfacher Weg, meinen Arbeitsbereich aufzuräumen, wenn ich meine "Quell" -Spalten nicht mehr brauche, aber den Datenrahmen beibehalten möchte? Das heißt, jetzt, da ich mit dem Bearbeiten der Daten fertig bin, möchte ich nur noch Daten haben dd und keine der kleineren Variablen, die die weitere Analyse versehentlich maskieren könnten:

    > ls()
[1] "dd"

Ich finde, die Lösung muss von der Form sein rm(ls[ -(dd) ]) oder etwas, aber ich kann nicht ganz herausfinden, wie ich sagen soll: "Bitte räumt alles auf, ABER die folgenden Objekte."

Antworten:

9 für die Antwort № 1

Ich würde das anstellen, indem ich eine separate Umgebung erstellte, in der alle Junk-Variablen gespeichert werden sollten with()und kopiert dann diejenigen, die Sie behalten möchten, in die Hauptumgebung. Dies hat den Vorteil, dass Sie aufgeräumt sind, aber auch alle Ihre Objekte in der Nähe haben, falls Sie sie noch einmal ansehen möchten.

temp <- new.env()
with(temp, {
x <- rnorm(25, mean = 65, sd = 10)
y <- rnorm(25, mean = 75, sd = 7)
z <- 1:25
dd <- data.frame(mscore = x, vscore = y, caseid = z)
}
)

dd <- with(temp,dd)

Das gibt Ihnen:

> ls()
[1] "dd"   "temp"
> with(temp,ls())
[1] "dd" "x"  "y"  "z"

und natürlich können Sie die Junk-Umgebung beseitigen, wenn Sie wirklich wollen.


11 für die Antwort № 2

Hier ist ein Ansatz mit setdiff:

rm(list=setdiff(ls(), "dd"))

0 für die Antwort № 3

Da ich vergessen habe, dass Kommentare keine vollständige Formatierung unterstützen, wollte ich hier auf die Empfehlung von Hadley eingehen. Ein Teil meines vorhandenen Codes - möglicherweise unvollständig - funktioniert in der Regel folgendermaßen:

    caseid <- 1:25
height <- rnorm(25, mean = 150, sd = 15)
hd     <- data.frame(caseid, height)
hd     <- hd [-(7), ] # Removing a case
library(ggplot2)
qplot(x = caseid, y = height, data = hd) # Plots 25 points

In dem obigen Code qplot() 25 Punkte zeichnen, und ich denke, es liegt an meinen globalen Variablen caseid und height maskieren ihren Versuch, lokal vom bereitgestellten Datenrahmen auf sie zuzugreifen. Der Fall, den ich entfernt habe, scheint immer noch geplottet zu werden, da er in den globalen Variablen angezeigt wird, nicht jedoch im Datenrahmen hd zur Zeit der qplot() Anruf.

Mein Gefühl ist, dass dieses Verhalten völlig isterwartet, und dass die Antwort hier lautet, dass ich einer suboptimalen Codierungspraxis folge. Wie kann ich also anfangen, Code zu schreiben, der diese Art von unbeabsichtigten Kollisionen vermeidet?