有没有办法识别在源脚本中创建,修改或引用的所有工作区对象?我在我的工作场所有数百个随机命名的对象,并且是“清理房子” - 我希望将来能够更加积极主动地对待这一事件,并且最后只是rm()来源于源代码脚本。 / p>
答案 0 :(得分: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
确实是&#34; c&#34;而modified_objects
确实是&#34; a&#34;在这个例子中。显然,要实现这一点,您需要确保在源文件中以任何方式创建或修改old_objects
和old_obj_names
!