Есть ли способ идентифицировать все объекты рабочей области, созданные, измененные или ссылающиеся в сценарии источников? У меня есть сотни случайно названных объектов на моем рабочем месте, и я 'уборка дома' - я хотел бы быть в состоянии быть более активным в этом в будущем и просто rm() черт из исходного сценария в конце.R идентифицировать объекты рабочей области, используемые в источнике
0
A
ответ
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
не были созданы или изменены в исходном файле!
В ваших вызовах 'ls' вы можете указать' all = TRUE', чтобы получить все скрытые объекты. – Choubi