2010-08-21 18 views
29

Bu çok küçük bir sorundur, ancak tam olarak burada neler olup bittiğini anlamak isterim. Bu noktadarm (liste = ls()) çalışma alanını tamamen temizlemiyor

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) 

, ben

rm(list=ls()) 

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

yapabilirsiniz ancak takmak bana bir x ve y maskeleme hakkında bir uyarı verir:

ben aşağıdakileri yapın Say. Şimdiden onları aldattım sanıyordum. Ne oluyor? Bir çalışma alanını tamamen nasıl temizlerim?

+5

Bize pek çok nedenlerden biri değil e – hadley

cevap

26

attach(), global ortamınızda x ve y kopyalarını oluşturmaz, arama yoluna bir veri çerçevesi ekler. ?attach itibaren

: Örneğin

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 kendisi rm için yardım diyor:

## 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()) 

Not 'neredeyse'. Farklı ortamlar var.

detach(values1)'u denediniz mi?

7

Sadece söz ... Eğer, belki de .First ve .Last fonksiyonları gibi, ortamınızdaki nesneleri gizlediyseniz yapabilirsiniz rm(list = ls(all.names = TRUE)) ile kaldırın. Ancak sizin durumunuzda, nesneyi arama yolundan kaldırmak için detach(objectname) kullanın. detach(), .GlobalEnv kaldırılamayacağı için (# base), # 2 konumundaki herhangi bir nesneyi kaldıracaktır. detach() ile önceden yüklenmiş paketleri kaldırabilirsiniz, bu yüzden dikkatli olun (her zaman library(packagename) ile yükleyebilirsiniz).

2

Büyük ihtimalle, x ve y sütunları/bileşenleri ile eklenmiş en az bir başka veri çerçevesine veya listeye sahipsiniz. Potansiyel çakışmaları olan tüm nesneleri görmek için "çakışmalar" işlevini kullanabilir ve bu nesnelerin nerede olduğunu bulmak için "bul" işlevini kullanabilirsiniz ("arama" işlevi de eklediğiniz tüm şeyleri göstererek yardımcı olur).

Sorunuz, veri çerçevelerinin eklenmesinin neden kaldırıldığına dair iyi bir örnektir. "Birlikte" veya "içeride" gibi işlevlerin kullanılması daha iyidir; böylece nesneleri ayırmayı unutmanızın sorunlarına neden olmaz.

2

Belirli bir paketi Çalışma Alanı'ndan kaldırmak için detach() işlevini kullanmak için, paketin tam tanımını gerektirir.

Örnek: Bir paketi kaldırın ISwR Yanıt 1: ayırma (ISwR) .... Not Work! Paket hala Çalışma Alanında. Cevap 2: ayırma (paket: ISwR) .... İŞLER! Paket, Çalışma Alanından kaldırıldı.

rm(list=ls()) 

ya:

-1

kullanabilirsiniz

rm(list=(ls())) 

ama sen RStudio ile çalışıyorsanız R.

+1

eki OP'nin sorusunu yanıtlamıyor ... –

0

, sadece Oturum gidebilirsiniz kapatmadan önce çalışma alanınızı kaydetmek -> Çalışma Alanını Temizle ... Çalışma alanınızdan tüm değişkenleri temizlemek için

İlgili konular