R识别源中使用的工作区对象
R identify workspace objects used in source
有没有办法识别源脚本中创建、修改或引用的所有工作区对象?我的工作场所有数百个随机命名的对象,并且是 'cleaning house' - 我希望将来能够更加积极主动地处理这个问题,最后只需要 rm() 就可以了。
最简单的方法是在采购之前将环境对象存储在列表中,采购,然后将新环境对象与旧列表进行比较。
这是一些伪代码。
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
确实是 "c",modified_objects
确实是 "a"。显然,要使其正常工作,您需要确保 old_objects
和 old_obj_names
均未以任何方式在源文件中创建或修改!
有没有办法识别源脚本中创建、修改或引用的所有工作区对象?我的工作场所有数百个随机命名的对象,并且是 'cleaning house' - 我希望将来能够更加积极主动地处理这个问题,最后只需要 rm() 就可以了。
最简单的方法是在采购之前将环境对象存储在列表中,采购,然后将新环境对象与旧列表进行比较。
这是一些伪代码。
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
确实是 "c",modified_objects
确实是 "a"。显然,要使其正常工作,您需要确保 old_objects
和 old_obj_names
均未以任何方式在源文件中创建或修改!