2010-09-15 1 views
13

Est-il possible de réinitialiser une instance de R?Réinitialiser l'instance R

Par exemple. si j'ai utilisé les commandes

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

Et donc pollué le système avec la variable x. Dans cet état puis-je revenir à un état propre sans fermer R et le relancer?

Répondre

23

Vous pouvez supprimer toutes les variables de votre espace de travail en utilisant

rm(list = ls()) 

Vous pouvez packages 'de déchargement' avec

detach(package:packagename) 

EDIT:

Vous pouvez fermer tous les périphériques graphiques avec

graphics.off() 

Vous pouvez effacer l'historique de l'éditeur de commandes avec CTRL+L. Si vous utilisez Tinn-R comme éditeur, vous disposez d'un bouton "Effacer tout" qui efface l'espace de travail et l'historique de l'éditeur de commandes et ferme les périphériques graphiques. (Il ne se détache pas de paquets.)


AUTRE EDIT:

Une autre chose que vous devez faire pour réinitialiser R est de fermer toutes les connexions ouvertes. Il est incroyablement mauvais de laisser traîner des connexions ouvertes, c'est donc plus qu'une nécessité. (Vous pouvez probablement tromper close_all_connections par l'ouverture des connexions dans des environnements obscurs, mais dans ce cas, vous ne disposez que vous à blâmer.)

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() 

Comme Marek suggère, utiliser closeAllConnections pour le faire.

AUTRE EDIT:

En réponse au commentaire de Ben sur la réinitialisation des options, qui est en fait un peu délicat. La meilleure façon de le faire serait de stocker une copie de vos options lorsque vous chargez R, puis de les réinitialiser à ce stade.

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

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

Si vous n'êtes pas assez prévoyants pour le mettre en place lorsque vous chargez R, alors vous besoin de quelque chose comme cette fonction.

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) 
) 
) 

Les options de cette fonction fournissent une séance de R vanille afin que vous voudrez peut-être la source de votre fichier Rprofile.site ensuite à personnaliser R comme vous le souhaitez.

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

Si je comprends bien, il peut encore être dispositifs ouverts après l'utilisation de ces deux commandes. Y at-il une seule commande qui vous permet de réinitialiser R à zéro. Dans gnuplot, la commande "reset" a fait le travail. – midtiby

+2

R est un peu plus compliqué que gnuplot. – mbq

+0

Il existe une fonction 'closeAllConnections'. – Marek

0

basez la réponse @Richie Cotton, commentaires et plus, je pense qu'il vaut la peine de tenir compte de cinq éléments:

  1. Retirez tous les objets
  2. Décharger paquets non natifs
  3. Fermer toutes les connexions
  4. Restaurer les options par défaut
  5. Fermer tous les périphériques graphiques

Alors, voilà ma fonction simple ResetR:

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