Recently, I had to install an older version of an R package, because a function was deprecated that I wanted to use. I wanted to install the old version in addition to and not instead of the new version and I came up with the following solution.
Installing Packages to a Different Location
library(devtools) library(httr) library(curl)
In addition to my custom Windows library, I created two new folders to store packages in, one for older packages and one for devel versions.
dev_lib <- file.path("~/../Documents/R/win-library/dev-versions/") old_lib <- file.path("~/../Documents/R/win-library/old-versions/") list.dirs("~/../Documents/R/win-library", recursive = FALSE) #>  "C:/Users/plieninger/Documents/../Documents/R/win-library/3.5" #>  "C:/Users/plieninger/Documents/../Documents/R/win-library/dev-versions" #>  "C:/Users/plieninger/Documents/../Documents/R/win-library/old-versions"
Then, I can install packages in these folders using custom arguments:
install.packages("~/../Downloads/MplusAutomation_0.7.tar.gz", lib = old_lib, repos = NULL)
Installing Packages to a Different Location Using devtools
devtools::install_version() allows to install a specific version of a package automatically without having to manually download the archive.
However, you cannot use a custom path, but
withr::with_libpaths() can take care of that. Here, for example, I install an old version of MplusAutomation and the devel version of ggplot2.
withr::with_libpaths(new = old_lib, code = install_version("MplusAutomation", version = "0.7", dependencies = FALSE))
withr::with_libpaths(new = dev_lib, code = install_github("tidyverse/ggplot2", dependencies = FALSE))
Note, that I loaded devtools, httr, and curl above, because they need to be available inside
with_libpaths(). Furthermore, I used
dependencies = FALSE, because I already have the package dependencies in my default folder
"/win.library/3.4/" and do not want them to be installed in the custom folders as well.
When I load MplusAutomation (version 0.7-1), the function
extractModelSummaries() is not available, and the call returns an error.
suppressPackageStartupMessages( library(MplusAutomation) ) # doesn't work: MplusAutomation::extractModelSummaries() #> extractModelSummaries has been deprecated. Please use readModels("nameofMplusoutfile.out", what="summaries")$summaries to replicate the old functionality.
However, when I load the old version 0.7, I can use this function as I did in previous years.
library(MplusAutomation, lib.loc = old_lib) # works: MplusAutomation::extractModelSummaries()