2010-08-21 3 views
29

이것은 아주 사소한 문제이지만 여기에서 무슨 일이 일어나는지 정확히 알고 싶습니다. 이 시점에서rm (list = ls())이 작업 영역을 완전히 지우지 않습니다.

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) 

, 나는

rm(list=ls()) 

values2 <- dbGetQuery("select x,y from table1") 
attach(values2) 

을 할 수 있지만 연결은 나에게 x와 y를 마스킹에 대한 경고를 제공합니다 :

내가 다음과 같이 말한다. 나는 내가 이미 그것들을 묶어 놓았다고 생각했다. 무슨 일 이니? 작업 공간을 완전히 지우려면 어떻게합니까?

+5

전자 – hadley

답변

26

attach() 글로벌 환경에서 xy의 복사본을 만들지 않으면 검색 경로에 데이터 프레임을 연결합니다. ?attach에서

: 예를 들어

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. 

:

> 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"  
3

R 자체가 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()) 

참고 '거의'. 다른 환경이 있습니다.

detach(values1)을 사용해 보셨습니까?

7

그냥 언급 ... 당신은, 아마도, .First.Last 기능과 같은 사용자 환경에서 객체를 숨긴 경우, 당신이 할 수있는 rm(list = ls(all.names = TRUE))으로 제거하십시오. 그러나 귀하의 경우에는 detach(objectname)을 사용하여 검색 경로에서 개체를 제거하십시오. detach().GlobalEnv을 제거 할 수 없으므로 위치 # 2의 모든 객체를 제거합니다 (및 base도 마찬가지 임). detach()을 사용하면 이전에로드 한 패키지를 언로드 할 수 있으므로주의해야합니다 (항상 library(packagename)과 함께로드 할 수 있음).

2

대부분의 경우 x 및 y 열/구성 요소가 첨부 된 다른 데이터 프레임이나 목록이 하나있을 수 있습니다. "갈등"기능을 사용하면 잠재적 인 갈등이있는 모든 개체를보고 "찾기"기능을 사용하여 해당 개체의 위치를 ​​확인할 수 있습니다. "검색"기능은 첨부 한 모든 것을 표시하는데도 도움이됩니다.

데이터 프레임을 첨부하는 것이 싫은 이유의 좋은 예입니다. 개체를 분리하지 않아도 문제가 발생하지 않도록 "함께"또는 "내부"와 같은 기능을 사용하는 것이 더 좋습니다.

2

detach() 함수를 사용하여 Workspace에서 특정 패키지를 제거하려면 패키지에 대한 전체 설명이 필요합니다.

예 : 패키지 제거 ISwR 답변 1 : detach (ISwR) .... Not Work! 패키지는 여전히 작업 공간에 있습니다. 답변 2 : detach (패키지 : ISwR) .... 작동합니다! 패키지가 작업 공간에서 제거됩니다.

rm(list=ls()) 

나 :

-1

당신은 사용할 수 있습니다

rm(list=(ls())) 

을하지만 당신은 당신이 RStudio 작업하는 경우 R.

+1

첨부 실제로 OP의 질문에 대답하지 않습니다 ... –

0

, 당신은 단지 세션에 갈 수 닫기 전에 작업 공간을 저장 -> 작업 영역 지우기 ... 작업 영역에서 모든 변수를 지우려면

관련 문제