除某些变量外,用于清理当前工作空间的功能

时间:2019-02-20 15:59:57

标签: r scope

如何编写一个通用的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

但是我希望它是一个函数,以便它适用于多个脚本,并且我可以在一处更改不应清除的变量。这可能吗?

2 个答案:

答案 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)

如果将其包装在函数中,则必须记住,函数在执行时会创建自己的环境。因此,您需要每次(分别在lsrm中)指定环境。您可能要从.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