如何在保留某些对象的同时整洁地清理R工作区?

如何在保留某些对象的同时整洁地清理R工作区?,r,statistics,R,Statistics,假设我通过将向量绑定在一起来处理一些数据,就像我在一个懒散的星期天下午习惯做的那样 x <- rnorm(25, mean = 65, sd = 10) y <- rnorm(25, mean = 75, sd = 7) z <- 1:25 dd <- data.frame(mscore = x, vscore = y, caseid = z) 如果我不再需要“源”列,但我想保留数据框,那么清理工作区的简单方法是什么?也就是说,现在我已

假设我通过将向量绑定在一起来处理一些数据,就像我在一个懒散的星期天下午习惯做的那样

    x <- rnorm(25, mean = 65, sd = 10)
    y <- rnorm(25, mean = 75, sd = 7)
    z <- 1:25

    dd <- data.frame(mscore = x, vscore = y, caseid = z)
如果我不再需要“源”列,但我想保留数据框,那么清理工作区的简单方法是什么?也就是说,现在我已经完成了对数据的操作,我只希望有
dd
,没有可能无意中掩盖进一步分析的较小变量:

    > ls()
    [1] "dd"

我觉得解决方案必须是
rm(ls[-(dd)])
或其他形式,但我不太明白如何说“请清理除以下对象以外的所有对象。”

下面是一种使用
setdiff
的方法:

rm(list=setdiff(ls(), "dd"))

因为我忘了注释不支持完整格式,所以我想在这里回应Hadley的建议。我现有的一些代码(可能是草率的)往往是这样工作的:

    caseid <- 1:25
    height <- rnorm(25, mean = 150, sd = 15)
    hd     <- data.frame(caseid, height)
    hd     <- hd [-(7), ] # Removing a case
    library(ggplot2)
    qplot(x = caseid, y = height, data = hd) # Plots 25 points

caseid我将创建一个单独的环境来存储所有垃圾变量,使用
with()
创建数据帧,然后将要保留的复制到主环境中。这样做的好处是整洁,但同时也可以保留所有对象,以防您想再次查看它们

temp <- new.env()
with(temp, {
    x <- rnorm(25, mean = 65, sd = 10) 
    y <- rnorm(25, mean = 75, sd = 7) 
    z <- 1:25 
    dd <- data.frame(mscore = x, vscore = y, caseid = z)
    }
)

dd <- with(temp,dd)

当然,如果你真的愿意,你可以摆脱垃圾环境。

@rcs-这很聪明。我的问题在数据清理中常见吗?我想是的,但也许是因为我是个新手。有一个互动的slice n dice位,然后需要清理不再需要的位,这是不是很奇怪?我发现这很常见,我喜欢有一个修剪过的工作空间,我从不使用
rm
。通常情况下,你有一些临时的片段放在周围并不重要——如果经常发生,这可能是你应该创建一个函数的标志。我认为@hadley是对的。我担心的是,让他们到处乱放可能会掩盖我正在做的其他分析。这里有一个例子。很抱歉,我上面的代码格式不正确。我似乎无法让Markdown合作:-(嗯…我不认为这是怎么回事。例如,我制作了一个hd2,它只有十行来自hd。如果全局caseid和高度在qplot()中被屏蔽,数据参数取什么并不重要,对吧?但我肯定用hd2.2得到了10分。如果你明确地将caseid和height设置为data.frame,而不需要它们作为自己的向量,你可以使用
hd@Matt-这些都是很好的建议。不过,有时我无法在data.frame命令中原位生成它们,所以我认为Fotjaseek找到了一个很好的解决方案。出于好奇,你能分享你只生成10个数据点的代码吗?当然-我刚刚调整了你的hd子集:
hd或使用
local
dd
temp <- new.env()
with(temp, {
    x <- rnorm(25, mean = 65, sd = 10) 
    y <- rnorm(25, mean = 75, sd = 7) 
    z <- 1:25 
    dd <- data.frame(mscore = x, vscore = y, caseid = z)
    }
)

dd <- with(temp,dd)
> ls()
[1] "dd"   "temp"
> with(temp,ls())
[1] "dd" "x"  "y"  "z"