如何编写一个通用的R函数来清除当前工作空间以及一些自定义变量?当然,我可以使用以下代码在单个脚本中实现:
prj = '/path/to/project'
src = 'string'
data_to_clean = head(iris)
rm(list = ls()[ !ls() %in% c('prj', 'src') ] )
# only prj and src remain
但是我希望它是一个函数,以便它适用于多个脚本,并且我可以在一处更改不应清除的变量。这可能吗?
答案 0 :(得分:1)
我认为您想删除该功能本身。重要的一点是告诉rm
环境从何处删除这些对象:
clean_workspace <- function(not_to_be_removed, envir = globalenv()) {
objs <- ls(envir = envir)
rm(list = objs[ !objs %in% not_to_be_removed], envir = envir)
}
prj = '/path/to/project'
src = 'string'
data_to_clean = head(iris)
clean_workspace(c('prj', 'src'))
ls()
#> [1] "prj" "src"
答案 1 :(得分:1)
如果将其包装在函数中,则必须记住,函数在执行时会创建自己的环境。因此,您需要每次(分别在ls
和rm
中)指定环境。您可能要从.GlobalEnv
中删除它们。
clean_workspace <- function(not_to_be_removed) {
rm(list =
setdiff(ls(envir = .GlobalEnv), c("clean_workspace", not_to_be_removed)),
envir = .GlobalEnv)
}
prj = '/path/to/project'
src = 'string'
data_to_clean = head(iris)
clean_workspace(c('prj', 'src'))
为了不删除函数本身,应将其添加到不删除的值中。
如果您想了解有关环境的更多信息,请查看this overview。