rm(list=ls())不';我不能完全清除工作区

rm(list=ls())不';我不能完全清除工作区,r,R,这是一个非常小的问题,但我想确切地了解这里发生了什么 假设我这样做: library(RMySQL) con <- dbConnect(MySQL(), host="some.server.us-east-1.rds.amazonaws.com",user="aUser", password="password", dbname="mydb") values1 <- dbGetQuery(con,"select x,y from table1") attach(values1)

这是一个非常小的问题,但我想确切地了解这里发生了什么

假设我这样做:

library(RMySQL)
con <- dbConnect(MySQL(), host="some.server.us-east-1.rds.amazonaws.com",user="aUser", password="password", dbname="mydb")

values1 <- dbGetQuery(con,"select x,y from table1")
attach(values1)
库(RMySQL)

conR本身在
rm
的帮助中说:

## remove (almost) everything in the working environment.
## You will get no warning, so don't do this unless you are really sure.
rm(list = ls())
注意“几乎”。有不同的环境

您是否尝试过分离(值1)

附加()
在您的全局环境中不复制
x
y
,而是将数据帧附加到搜索路径

?附加

The database is not actually attached.  Rather, a new environment
 is created on the search path and the elements of a list
 (including columns of a data frame) or objects in a save file or
 an environment are _copied_ into the new environment.  If you use
 ‘<<-’ or ‘assign’ to assign to an attached database, you only
 alter the attached copy, not the original object.  (Normal
 assignment will place a modified version in the user's workspace:
 see the examples.)  For this reason ‘attach’ can lead to
 confusion.
数据库实际上没有连接。而是一个新的环境
在搜索路径和列表的元素上创建
(包括数据框的列)或保存文件中的对象,或
将环境复制到新环境中。如果你使用

“我只想提一下。。。如果您的环境中可能有隐藏对象,如
.First
.Last
函数,则可以使用
rm(list=ls(all.names=TRUE))
删除它们。但在您的情况下,使用
detach(objectname)
从搜索路径中删除对象
detach()
将删除位置#2中的任何对象,因为无法删除
.GlobalEnv
(以及
base
)。使用
detach()
可以卸载以前加载的包,因此请小心(尽管您可以始终使用
库(packagename)
加载它们)。

很可能至少有一个其他数据框或列表附加了x和y列/组件。您可以使用“冲突”功能查看所有存在潜在冲突的对象,并使用“查找”功能查找这些对象所在的位置(“搜索”功能还可以显示所有已附加的内容)

您的问题是一个很好的例子,说明为什么不赞成附加数据框,最好使用“with”或“in”之类的函数,这样您就不会忘记分离对象。要使用detach()函数从工作空间中删除特定的包,需要包的完整描述

示例:删除包ISwR 回答1:分离(ISwR)。。。。不行!包裹仍在工作空间内。 回答2:分离(包装:ISwR)。。。。作品软件包将从工作空间中移除。

您可以使用:

rm(list=ls())
或:


但是在关闭R之前保存您的工作区。

如果您正在使用RStudio,您只需进入会话->清除工作区。。。
要清除工作区中的所有变量

不使用Attachi的原因之一有没有一种方法可以在更改attach(a)后清除它创建的环境?如果我附加(a),使用列名作为引用对列进行更改,则“分离(a)”后跟“附加(a)”不会删除这些更改。
> search()
[1] ".GlobalEnv"        "package:stats"     "package:graphics" 
[4] "package:grDevices" "package:utils"     "package:datasets" 
[7] "package:methods"   "Autoloads"         "package:base"     
> a <- data.frame(stuff=rnorm(100))
> search()
[1] ".GlobalEnv"        "package:stats"     "package:graphics" 
[4] "package:grDevices" "package:utils"     "package:datasets" 
[7] "package:methods"   "Autoloads"         "package:base"     
> attach(a)
> search()
 [1] ".GlobalEnv"        "a"                 "package:stats"    
 [4] "package:graphics"  "package:grDevices" "package:utils"    
 [7] "package:datasets"  "package:methods"   "Autoloads"        
[10] "package:base"     
> rm(list=ls())
> search()
 [1] ".GlobalEnv"        "a"                 "package:stats"    
 [4] "package:graphics"  "package:grDevices" "package:utils"    
 [7] "package:datasets"  "package:methods"   "Autoloads"        
[10] "package:base"     
> stuff
  [1] -0.91436377  0.67397624  0.62891651 -0.99669584  2.07692590 -0.62702302
  [...]
> detach(a)
> search()
[1] ".GlobalEnv"        "package:stats"     "package:graphics" 
[4] "package:grDevices" "package:utils"     "package:datasets" 
[7] "package:methods"   "Autoloads"         "package:base"    
rm(list=ls())
rm(list=(ls()))