重置R实例

mid*_*iby 15 r

是否可以重置R的实例?

例如.如果我使用了命令

x <- 1:10
plot(x, -x)
Run Code Online (Sandbox Code Playgroud)

因此用x变量污染了系统.在这种状态下,我可以再恢复到一个干净的状态,而无需关闭关闭R和再次启动呢?

Ric*_*ton 26

您可以使用从工作区中删除所有变量

rm(list = ls())
Run Code Online (Sandbox Code Playgroud)

你可以用'卸载'包

detach(package:packagename)
Run Code Online (Sandbox Code Playgroud)

编辑:

您可以关闭所有图形设备

graphics.off()
Run Code Online (Sandbox Code Playgroud)

您可以使用清除命令编辑器历史记录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()
Run Code Online (Sandbox Code Playgroud)

正如马雷克建议的那样,用closeAllConnections这个来做.

另一个编辑:

在回应Ben关于重置选项的评论时,这实际上有点棘手.最好的方法是在加载R时存储选项的副本,然后在此时重置它们.

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

#on reset
options(baseenv()$.Options2)
Run Code Online (Sandbox Code Playgroud)

如果您在加载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)
  )
)
Run Code Online (Sandbox Code Playgroud)

该函数中的选项提供了一个vanilla R会话,因此您可能希望在之后获取Rprofile.site文件以自定义R您喜欢的方式.

source(file.path(R.home("etc"), "Rprofile.site"))
Run Code Online (Sandbox Code Playgroud)

  • R比gnuplot复杂一点. (2认同)
  • +1很棒的答案.我要添加的唯一其他内容是:1 - 调用`gc(reset = TRUE)`,也许几次只是为了确定,2 - `unlink`用于任何临时文件和`tempdir`的内容. (2认同)