Сбросить экземпляр R - PullRequest
       6

Сбросить экземпляр R

15 голосов
/ 15 сентября 2010

Можно ли сбросить экземпляр R?

Например. если бы я использовал команды

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

И, таким образом, загрязнил систему переменной x. В этом состоянии я могу затем вернуться в чистое состояние, не выключая R и не запуская его снова?

Ответы [ 2 ]

26 голосов
/ 15 сентября 2010

Вы можете удалить все переменные из вашей рабочей области, используя

rm(list = ls())

Вы можете 'выгружать' пакеты с помощью

detach(package:packagename)

EDIT:

Вы можете закрыть все графические устройства с помощью

graphics.off()

Вы можете очистить историю редактора команд с помощью CTRL+L.

Если вы используете Tinn-R в качестве редактора, есть кнопка «Очистить все», которая очищает ваше рабочее пространство и историю командного редактора, а также закрывает графические устройства. (Не отсоединяет пакеты.)


ДРУГОЕ РЕДАКТИРОВАНИЕ:

Еще одна вещь, которую вы должны сделать для сброса R, это закрыть все открытые соединения. Невероятно плохо оставлять открытые соединения лежащими, так что это больше ремень и скобы , чем необходимость. (Вероятно, вы можете обмануть close_all_connections, открыв связи в непонятной обстановке, но в этом случае вы сами виноваты.)

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

Как подсказывает Марек, используйте closeAllConnections для этого.

ДРУГОЕ РЕДАКТИРОВАНИЕ:

В ответ на комментарий Бена о сбросе параметров это на самом деле немного сложно. лучший способ сделать это - сохранить копию ваших опций при загрузке R, а затем сбросить их на этом этапе.

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

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

Если вы недостаточно предусмотрительны, чтобы настроить это при загрузке R, то вам нужна что-то вроде этой функции.

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      = "@CRAN@", 
      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)
  )
)

Параметры в этой функции обеспечивают ванильный R-сеанс, поэтому вы можете захотеть получить исходный файл Rprofile.site впоследствии, чтобы настроить R так, как вам нравится.

source(file.path(R.home("etc"), "Rprofile.site"))
0 голосов
/ 10 января 2018

Основываясь на ответе @Richie Cotton, комментариях и многом другом, я думаю, что стоит рассмотреть пять элементов:

  1. Удалить все объекты
  2. Выгрузка не родных пакетов
  3. Закрыть все соединения
  4. Восстановление параметров по умолчанию
  5. Закрыть все графические устройства

Итак, вот моя простая 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()

}

НТН

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...