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

bri*_*ndk 11 statistics r

假设我通过将矢量绑定在一起来搞乱一些数据,正如我在一个懒惰的周日下午所做的那样.

    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)
Run Code Online (Sandbox Code Playgroud)

我现在有了新的数据帧dd,这太棒了.但是我的先前的切片和切片仍然存在碎屑:

    > ls()
    [1] "dd"        "x"          "y"          "z"         
Run Code Online (Sandbox Code Playgroud)

如果我不再需要"源"列,那么清理工作区的简单方法是什么,但我想保留数据帧?也就是说,既然我已经完成了操作我想要的数据,dd并且没有任何较小的变量可能会无意中掩盖进一步的分析:

    > ls()
    [1] "dd"
Run Code Online (Sandbox Code Playgroud)

我觉得解决方案必须是形式rm(ls[ -(dd) ])或东西,但我无法弄清楚如何说"请清理一切,但以下的对象."

rcs*_*rcs 11

这是一种使用方法setdiff:

rm(list=setdiff(ls(), "dd"))
Run Code Online (Sandbox Code Playgroud)

  • 我从不使用`rm`.通常并不重要的是你有一些临时的东西 - 如果它发生了很多,这可能是你应该创建一个功能的标志. (3认同)

Foj*_*sek 10

我会通过创建一个单独的环境来存储所有垃圾变量,使用数据框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)
Run Code Online (Sandbox Code Playgroud)

这给你:

> ls()
[1] "dd"   "temp"
> with(temp,ls())
[1] "dd" "x"  "y"  "z" 
Run Code Online (Sandbox Code Playgroud)

如果你真的想要,你当然可以摆脱垃圾环境.

  • 或者使用`local`如`dd < - local({x <-....; data.frame(msscore = x,...)})`并且没有`temp`.`local`返回最后一个表达式,所以最后一行应返回`dd`. (3认同)