2016-07-28 3 views
0

Есть ли способ идентифицировать все объекты рабочей области, созданные, измененные или ссылающиеся в сценарии источников? У меня есть сотни случайно названных объектов на моем рабочем месте, и я 'уборка дома' - я хотел бы быть в состоянии быть более активным в этом в будущем и просто rm() черт из исходного сценария в конце.R идентифицировать объекты рабочей области, используемые в источнике

ответ

0

Самый простой способ - сохранить объекты среды в списке до поиска, поиска, а затем сравнить новые объекты среды со старым списком.

Вот несколько псевдокодов.

old_objects <- ls() 
source(file) 
new_objects <- setdiff(ls(), c(old_objects, "old_objects")) 

Это идентифицирует созданные объекты. Чтобы определить, был ли изменен объект, я не вижу другого решения, кроме как предварительно сохранить все ваши объекты в списке, а затем после этого запускать одинаковые.

# rm(list = ls(all = TRUE)) 
a <- 1 
b <- 1 

old_obj_names <- ls() 
old_objects <- lapply(old_obj_names, get) 
names(old_objects) <- old_obj_names 

# source should go here 
a <- 2 
c <- 3 

# I add "old_obj_names" and "old_objects" in the setdiff as these 
# were created after the call to ls but before the source 
new_objects <- setdiff(ls(), c(old_obj_names, "old_obj_names", "old_objects")) 
modified_objects <- sapply(old_obj_names, function(x) !identical(old_objects[[x]], get(x)), 
          USE.NAMES = TRUE) 
modified_objects <- names(modified_objects[modified_objects]) 

new_objects действительно «с» и modified_objects действительно «а» в этом примере. Очевидно, что для этого вам необходимо убедиться, что ни old_objects, ни old_obj_names не были созданы или изменены в исходном файле!

+0

В ваших вызовах 'ls' вы можете указать' all = TRUE', чтобы получить все скрытые объекты. – Choubi

 Смежные вопросы

  • Нет связанных вопросов^_^