2010-09-15 5 views
13

Kann eine Instanz von R zurückgesetzt werden?Reset R-Instanz

Eg. wenn ich die Befehle

x <- 1:10 
plot(x, -x) 

verwendet habe und somit das System mit der x-Variable verschmutzt hat. In diesem Zustand kann ich dann wieder in einen sauberen Zustand zurückkehren, ohne R runterzufahren und neu zu starten? mit

rm(list = ls()) 

Sie können 'Entladen' Pakete mit

detach(package:packagename) 

EDIT

Antwort

23

Sie können alle Variablen aus Ihrem Arbeitsbereich entfernen:

Sie können alle Grafikgeräte schließen mit

graphics.off() 

Sie können den Befehlseditorverlauf mit CTRL+L löschen.

Wenn Sie Tinn-R als Editor verwenden, gibt es eine Schaltfläche "Alles löschen", mit der Sie den Verlauf des Arbeitsbereichs- und Befehlseditors löschen und Grafikgeräte schließen können. (Es lässt sich nicht vollständig Pakete.)


ANOTHER EDIT:

Eine andere Sache, die Sie würde zu tun haben, R zurückgesetzt ist, alle offenen Verbindungen zu schließen. Es ist unglaublich schlecht, offene Verbindungen offen zu lassen, also ist das mehr belt and braces als eine Notwendigkeit. (Sie können sich wahrscheinlich close_all_connections täuschen, indem Verbindungen in obskuren Umgebungen zu öffnen, aber in diesem Fall müssen Sie nur sich selbst. Schuld)

is.connection <- function(x) inherits(x, "connection") 

get_connections <- function(envir = parent.frame()) 
{ 
    Filter(is.connection, mget(ls(envir = envir), envir = envir)) 
} 

close_all_connections <- function() 
{ 
    lapply(c(sys.frames(), globalenv(), baseenv()), 
     function(e) lapply(get_connections(e), close)) 
} 

close_all_connections() 

Als Marek schlägt vor, verwenden closeAllConnections dies zu tun.

ANOTHER EDIT:

Als Reaktion auf Bens Kommentar zu Optionen zurückzusetzen, das ist eigentlich ein wenig kompliziert. Am besten speichern Sie eine Kopie Ihrer Optionen, wenn Sie R laden, und setzen Sie sie zu diesem Zeitpunkt zurück.

#on R load 
assign(".Options2", options(), baseenv()) 

#on reset 
options(baseenv()$.Options2) 

Wenn Sie nicht genug vorausschauendes dies einzurichten, wenn Sie R laden, dann müssen Sie so etwas wie diese Funktion.

reset_options <- function() 
{ 
    is_win <- .Platform$OS.type == "windows" 
    options(
    add.smooth   = TRUE, 
    browserNLdisabled  = FALSE, 
    CBoundsCheck   = FALSE, 
    check.bounds   = FALSE, 
    continue    = "+ ", 
    contrasts    = c(
     unordered = "contr.treatment", 
     ordered = "contr.poly" 
    ), 
    defaultPackages  = c(
     "datasets", 
     "utils", 
     "grDevices", 
     "graphics", 
     "stats", 
     "methods" 
    ), 
    demo.ask    = "default", 
    device    = if(is_win) windows else x11, 
    device.ask.default = FALSE, 
    digits    = 7, 
    echo     = TRUE, 
    editor    = "internal", 
    encoding    = "native.enc", 
    example.ask   = "default", 
    expressions   = 5000, 
    help.search.types  = c("vignette", "demo", "help"),  
    help.try.all.packages = FALSE, 
    help_type    = "text", 
    HTTPUserAgent   = with(
     R.version, 
     paste0(
     "R (", 
     paste(major, minor, sep = "."), 
     " ", 
     platform, 
     " ", 
     arch, 
     " ", 
     os, 
     ")" 
    ) 
    ), 
    internet.info   = 2, 
    keep.source   = TRUE, 
    keep.source.pkgs  = FALSE, 
    locatorBell   = TRUE, 
    mailer    = "mailto", 
    max.print    = 99999, 
    menu.graphics   = TRUE, 
    na.action    = "na.omit", 
    nwarnings    = 50, 
    OutDec    = ".", 
    pager     = "internal", 
    papersize    = "a4", 
    pdfviewer    = file.path(R.home("bin"), "open.exe"), 
    pkgType    = if(is_win) "win.binary" else "source", 
    prompt    = "> ", 
    repos     = c(
     CRAN  = "@[email protected]", 
     CRANextra = "http://www.stats.ox.ac.uk/pub/RWin" 
    ), 
    scipen    = 0, 
    show.coef.Pvalues  = TRUE, 
    show.error.messages = TRUE, 
    show.signif.stars  = TRUE, 
    str     = list(
     strict.width = "no", 
     digits.d  = 3, 
     vec.len  = 4 
    ), 
    str.dendrogram.last = "`", 
    stringsAsFactors  = TRUE, 
    timeout    = 60, 
    ts.eps    = 1e-05, 
    ts.S.compat   = FALSE, 
    unzip     = "internal", 
    useFancyQuotes  = TRUE, 
    verbose    = FALSE, 
    warn     = 0, 
    warning.length  = 1000, 
    width     = 80, 
    windowsTimeouts  = c(100, 500) 
) 
) 

Die Optionen in dieser Funktion eine Vanille-R-Sitzung, so dass Sie Ihre Rprofile.site Datei beziehen danach R anpassen könnte wünschen, wie es Ihnen gefällt.

source(file.path(R.home("etc"), "Rprofile.site")) 
+1

Wie ich es verstehe, kann es immer noch Geräte offen sein, nachdem diese beiden Befehle. Gibt es einen einzigen Befehl, mit dem Sie R auf Null zurücksetzen können? In gnuplot hat der Befehl "reset" die Aufgabe erledigt. – midtiby

+2

R ist ein bisschen komplizierter als gnuplot. – mbq

+0

Es gibt 'closeAllConnections' Funktion. – Marek

0

Basing auf die Antwort von @Richie Cotton, Kommentare und mehr, ich glaube, es lohnt sich fünf Elemente zu berücksichtigen:

  1. entfernen alle Objekte
  2. Unload nicht-native Pakete
  3. Schließen Alle Verbindungen
  4. Wiederherstellen der Standardoptionen
  5. Schließen Sie alle Grafikgeräte
  6. So

, da ist es meine einfache ResetR Funktion:

ResetR = function() { 

    # 1) Remove all objects 
    rm(list = ls(all=TRUE, envir = .GlobalEnv), envir = .GlobalEnv) 

    # 2) Unload non-native packages. 
    nat = c(".GlobalEnv", "package:datasets", "package:evd", "package:nortest", "package:MASS", "package:stats", "package:graphics", "package:grDevices", "package:utils", "package:methods", "Autoloads", "package:base") 

    p = search() 
    for (i in p) { 
     if (is.na(match(i, nat))) { 
      try(eval(parse(text=paste0("detach(", i, ", unload=T, force=T)"))), silent=T) # force=T is need in case package has dependency 
     } 
    } 

    # 3) Close all connections 
    try(closeAllConnections(), silent=T) 

    # 4) Restore default options 
    try(options(baseenv()$.Options2), silent=T) # Remember to put assign(".Options2", options(), baseenv()) at the bottom of YOUR_R_HOME\etc\Rprofile.site 

    # 5) Close all graphic devices 
    graphics.off() 

} 

hth