Limpar o ambiente em R

Gustavo du Mortier 13 janeiro 2022
Limpar o ambiente em R

Antes de iniciar um novo projecto ou iniciar uma nova sessão de trabalho em R, recomenda-se a limpeza do ambiente. Isto significa remover todos os objectos e destacar todos os pacotes instalados durante a sessão anterior.

A forma mais simples e fiável de limpar todo o ambiente é reiniciar o R, tendo o cuidado de não guardar a imagem actual do R ao fechar a aplicação. No RStudio, deve definir a opção Save workspace to .RData on exit para Never e desactivar a opção de restaurar o ambiente no reinício.

Deve também certificar-se de que não existem ficheiros .RData restantes na pasta do seu projecto. Estes ficheiros são invisíveis, pelo que terá de utilizar a linha de comando para verificar se tais ficheiros existem e, caso existam, apagá-los.

Limpar o ambiente sem reiniciar o R

Também é possível colocar o ambiente R num estado limpo utilizando código. Contudo, nenhum método pode garantir deixar o ambiente tão limpo como está quando se inicializa o R. Se quiser alguma forma de destacar todos os pacotes excepto os básicos, pode criar uma função - DetachPackages que automatiza esta tarefa.

Esta função cria um vector de nomes de pacotes básicos que deve impedir que se destaquem. Depois cria uma lista com todos os nomes de pacotes instalados e subtrai desta lista os nomes da lista básica. Finalmente, destaca os pacotes cujos nomes permanecem no 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)
        }
    }
}

Pode tentar esta função instalando e carregando primeiro um pacote como o readxl com estes comandos:

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

Se depois executar sessionInfo(), na secção other attached packages, obterá isto como parte da resultado:

other attached packages:
[1] readxl_1.3.1

Depois pode chamar a função DetachPackages(), e chamar novamente sessionInfo(). A secção other attached packages desaparecerá.