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)

, но приложение дает мне предупреждение о маскировке х и у. Я думал, что я уже забил их. Что происходит? Как мне полностью очистить рабочее пространство?

32
задан stevejb 21 August 2010 в 02:40
поделиться

4 ответа

attach() не создает копии x и y в вашем глобальном окружении, а присоединяет фрейм данных к пути поиска.

From ?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.

For example:

> 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"    
29
ответ дан 27 November 2019 в 21:03
поделиться

Просто упомяну ... если у вас, возможно, есть скрытые объекты в вашей среде, например .First и .Last функции, вы можете удалите их с помощью rm (list = ls (all.names = TRUE)) . Но в вашем случае используйте detach (objectname) , чтобы удалить объект из пути поиска. detach () удалит любой объект в позиции № 2, поскольку .GlobalEnv не может быть удален (и base тоже). С помощью detach () вы можете выгружать ранее загруженные пакеты, поэтому будьте осторожны (хотя вы всегда можете загрузить их с помощью библиотеки (имя пакета) ).

7
ответ дан 27 November 2019 в 21:03
поделиться

Сам 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())

Обратите внимание на «почти». Есть разные среды.

Вы пробовали отсоединить (values1) ?

3
ответ дан 27 November 2019 в 21:03
поделиться

Скорее всего, у вас есть хотя бы один другой фрейм данных или список, прикрепленный со столбцами / компонентами x и y. Вы можете использовать функцию «конфликты», чтобы увидеть все объекты, у которых есть потенциальные конфликты, и использовать функцию «найти», чтобы узнать, где находятся эти объекты (функция «поиск» также помогает, показывая все то, что вы прикрепили).

Ваш вопрос является хорошим примером того, почему присоединение фреймов данных не одобряется. Лучше использовать такие функции, как «с» или «внутри», чтобы у вас не было проблем, если вы забыли отсоединить объекты.

2
ответ дан 27 November 2019 в 21:03
поделиться
Другие вопросы по тегам:

Похожие вопросы: