【问题标题】:rm() doesn't seem to empty my R workspacerm() 似乎没有清空我的 R 工作区
【发布时间】:2015-01-20 00:40:59
【问题描述】:

我正在尝试清除我的 R 工作区。我在任何线程中发现的任何内容似乎都不起作用 - 我已经搜索并尝试了几个小时的解决方案:(

当我打开 R 并输入 ls 时,控制台会显示上一个会话的所有代码:

function (name, pos = -1L, envir = as.environment(pos), all.names = FALSE, 
    pattern) 
{
    if (!missing(name)) {
        nameValue <- try(name, silent = TRUE)
        if (identical(class(nameValue), "try-error")) {
            name <- substitute(name)
            if (!is.character(name)) 
                name <- deparse(name)
            warning(gettextf("%s converted to character string", 
                sQuote(name)), domain = NA)
            pos <- name
        }
        else pos <- nameValue
    }
    all.names <- .Internal(ls(envir, all.names))
    if (!missing(pattern)) {
        if ((ll <- length(grep("[", pattern, fixed = TRUE))) && 
            ll != length(grep("]", pattern, fixed = TRUE))) {
            if (pattern == "[") {
                pattern <- "\\["
                warning("replaced regular expression pattern '[' by  '\\\\['")
            }
            else if (length(grep("[^\\\\]\\[<-", pattern))) {
                pattern <- sub("\\[<-", "\\\\\\[<-", pattern)
                warning("replaced '[<-' by '\\\\[<-' in regular expression pattern")
            }
        }
        grep(pattern, all.names, value = TRUE)
    }
    else all.names
}
<bytecode: 0x2974f38>
<environment: namespace:base>

如果我输入 rm(list=ls()),然后再次输入 ls,我会得到完全相同的响应 - 即,之前会话中的代码没有被删除。

顺便说一句,我输入的是ls 没有括号。使用括号键入 ls() 将返回 character(0)。

我也尝试通过 RStudio 清除环境,甚至删除 ~/.Rdata 文件。什么都不会清除此工作区。每次我重新启动R并输入ls,所有旧代码仍然存在。

我已经尝试过this thread 中的提示,但它们对我不起作用。

知道为什么会发生这种情况吗?谢谢!

【问题讨论】:

  • 不太清楚您要做什么。 rm(list=ls()) 删除全局环境中的所有对象。你说的代码还在是什么意思?如果可以,请举个例子
  • 您输入的是ls() 来列出对象,而不是ls(没有()),对吗?
  • 说到代码,是指历史上你运行过的代码命令吗?
  • @MatthewLundberg,我正在输入ls 没有括号。用括号键入 ls() 将返回 character(0)
  • 也许你已经用别的东西替换了标准的 R ls-function。现在输入rm(ls)。

标签: r


【解决方案1】:

您看到的是ls 函数的源代码。当您输入不带括号的函数名称时,您将看到该函数的完整源代码(前提是该函数位于附加到搜索路径的某个包中,或者位于全局环境中)。

当您看到character(0) 作为调用ls() 的结果时,这意味着全局环境中没有对象。 ls 调用 home 的基础包与全局环境不同,无法移除其中的对象。

当你调用rm(list=ls())后character(0)是ls()的结果时,你已经成功清除了全局环境中的对象。

【讨论】:

  • 哇。我觉得非常地愚蠢。如果没有办法删除这个帖子,我想我会永远忍受这种耻辱。
  • @BenThomas - 这根本不是一个坏问题。我敢打赌,很多人对此感到困惑。希望这个问题对未来的 SO'ers 有用
  • @Ben Thomas- 非常有用的问题。我从 R 开始(具有 30 年的 Matlab 经验),我有同样的查询,并在这里找到了我的答案。好问题和好答案。
猜你喜欢
  • 2011-04-01
  • 1970-01-01
  • 1970-01-01
  • 2021-06-07
  • 2012-04-29
  • 2013-11-25
  • 2017-08-26
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多