清理 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 部分將消失。