我有一个根代码里面有很多脚本。在运行了前4个脚本之后,我可能需要取消从第4个脚本获得的环境中的对象。有可能吗?另一种选择是m(),但这样我就必须重新运行所有脚本,这需要一段时间,因为我有大量的数据。
定义一个函数rm_new()
(在你的"根代码"中):
rm_new=function( old ) {
current=ls(,envir=parent.frame())
to_delete = current[!(current %in% old)]
rm( list=to_delete,envir=parent.frame() )
}
当你到达你的"根代码"的末尾时,记住你想要保存的对象:
obj_to_keep=c("obj_to_keep",ls())
现在您可以添加您喜欢的任何东西,并使用rm_新()删除它当您完成它:
a=1:100
obj_to_keep=c("obj_to_keep",ls())
b=1:50
ls()
# [1] "a" "b" "obj_to_keep" "rm_new"
rm_new( old=obj_to_keep )
ls()
# [1] "a" "obj_to_keep" "rm_new"
如果第4脚本中的对象共享一些共同的东西,比如名称前缀,你可以尝试ls(pattern = "prefix") .如果不是,你还可以ls 在每个剧本之后rm 只移除新的物体。
为什么不运行不想在函数中保留对象的脚本呢?这样,它们将保存在不同的环境中,并在函数完成时被销毁。只返回您想要保存的对象。