romainfrancois / nothing

A package about nothing

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Unload all packages except base

wch opened this issue · comments

All packages should be unloaded except base, with unloadNamespace.

Normally you have to do this in the correct order to avoid errors. (You can't unload a package imported by another loaded package.) But a horrible, ugly way of doing it is to loop over all the loaded packages until only base is left, and ignore errors:

pkgs <- setdiff(loadedNamespaces(), "base")

while (length(pkgs) > 0) {
  for (pkg in pkgs) {
    tryCatch(unloadNamespace(pkg), error = function (e) invisible())
  }

  pkgs <- setdiff(loadedNamespaces(), "base")
}

This needs a check to avoid infinite loops, because some packages just won't unload properly.