So, someone should have simply answered the following.
lapply(paste('package:',names(sessionInfo()$otherPkgs),sep=""),detach,character.only=TRUE,unload=TRUE)
(edit: 6-28-19)
In the latest version of R 3.6.0 please use instead.
invisible(lapply(paste0('package:', names(sessionInfo()$otherPkgs)), detach, character.only=TRUE, unload=TRUE))
Note the use of invisible(*) is not necessary but can be useful to prevent the NULL reply from vertically spamming the R window.
(edit: 9/20/2019) In version 3.6.1
It may be helpful to convert loaded only names(sessionInfo()$loadedOnly)
to explicitly attached packages first, and then detach the packages, as so.
lapply(names(sessionInfo()$loadedOnly), require, character.only = TRUE)
invisible(lapply(paste0('package:', names(sessionInfo()$otherPkgs)), detach, character.only=TRUE, unload=TRUE, force=TRUE))
One can attempt to unload base packages via $basePkgs and also attempt using unloadNamespace(loadedNamespaces())
. However these typically are fraught with errors and could break basic functionality such as causing sessionInfo()
to return only errors. This typically occurs because of a lack of reversibility in the original package's design. Currently timeDate
can break irreversibly, for example.
(edit: 9/24/20) for version 4.0.2
The following first loads packages to test and then gives a sequence to fully detach all packages except for package "base" and "utils". It is highly recommended that one does not detach those packages.
invisible(suppressMessages(suppressWarnings(lapply(c("gsl","fBasics","stringr","stringi","Rmpfr"), require, character.only = TRUE))))
invisible(suppressMessages(suppressWarnings(lapply(names(sessionInfo()$loadedOnly), require, character.only = TRUE))))
sessionInfo()
#the above is a test
invisible(lapply(paste0('package:', c("stringr","fBasics")), detach, character.only=TRUE,unload=TRUE))
#In the line above, I have inserted by hand what I know the package dependencies to be. A user must know this a priori or have their own automated
#method to discover it. Without removing dependencies first, the user will have to cycle through loading namespaces and then detaching otherPkgs a
#second time through.
invisible(lapply(paste0('package:', names(sessionInfo()$otherPkgs)), detach, character.only=TRUE,unload=TRUE))
bspkgs.nb<-sessionInfo()$basePkgs[sessionInfo()$basePkgs!="base"]
bspkgs.nbu<-bspkgs.nb[bspkgs.nb!="utils"]
names(bspkgs.nbu)<-bspkgs.nbu
suppressMessages(invisible(lapply(paste0('package:', names(bspkgs.nbu)), detach, character.only=TRUE,unload=TRUE)))
#again this thoroughly removes all packages and loaded namespaces except for base packages "base" and "utils" (which is highly not recommended).