清理 R 的环境

Gustavo du Mortier 2020年12月31日
清理 R 的环境

在 R 中开始一个新项目或启动一个新的工作会话之前,建议先清理环境。这意味着要删除所有对象,并分离上一个会话期间安装的所有包。

清理整个环境的最简单、最可靠的方法是重新启动 R,注意关闭应用程序时不要保存当前的 R 映像。在 RStudio 中,你必须将 Save workspace to .RData on exit 选项设置为 Never,并禁用重启时恢复环境的选项。

你还应该确保项目文件夹中没有剩余的 .RData 文件。这些文件是不可见的,所以你需要使用命令行检查这些文件是否存在,如果存在,就删除它们。

在不重启 R 的情况下清除环境

也可以使用代码将 R 环境置于干净状态。但是,没有一种方法可以保证让环境像初始化 R 时一样干净。如果你想用某种方法分离除基本包以外的所有包,你可以创建一个函数-DetachPackages 来自动完成这个任务。

这个函数创建了一个基本包名的向量,你应该防止分离这些包。然后它创建一个包含所有已安装包名的列表,并从这个列表中减去基本列表中的包名。最后,它将分离那些名字仍在 package.list 中的软件包。

DetachPackages <- function() {
    basic.packages <- c("package:stats","package:graphics","package:grDevices","package:utils","package:datasets","package:methods","package:base")
    package.list <- search()[ifelse(unlist(gregexpr("package:",search()))==1,TRUE,FALSE)]
    package.list <- setdiff(package.list,basic.packages)
    if (length(package.list)>0) {
        for (package in package.list) {
            detach(package, character.only=TRUE)
        }
    }
}

你可以先用这些命令安装并加载一个包,比如 readxl,来尝试下这个功能。

install.packages("readxl")
library(`readxl`)

如果你执行 sessionInfo(),在 other attached packages 部分,你会得到这个作为输出的一部分。

other attached packages:
[1] readxl_1.3.1

然后你可以调用 DetachPackages() 函数,再调用 sessionInfo()other attached packages 部分将消失。