For these things, I use (which works on all platforms and after upgrading R):
- Set
R_LIBS_USERin your~/.Renviron. One<name>=<value>per line. - Don't hardcode the R version or architecture. Instead make use of so-called "specifiers", which include
%p(expands to the architecture, e.g.x86_64-pc-linux-gnu) and%v(expands to major and minor R version, e.g.3.5) - see?R_LIBS_USER. UsingR_LIBS_USER=~/R/%p-library/%vcorresponds to the default R settings.
To know the location of ~/.Renviron, which is not always obvious on Windows, use normalizePath(), e.g.
> normalizePath("~/.Renviron", mustWork = FALSE)
[1] "/home/hb/.Renviron"
That's on my Linux machine. On your Windows, I think you'll get something like:
> normalizePath("~/.Renviron", mustWork = FALSE)
[1] "C:/users/Greg/documents/.Renviron"
Now, if you edit/create that ~/.Renviron file to have a line:
R_LIBS_USER="C:/Users/Greg/Software/R/%p-library/%v
you will get:
> Sys.getenv('R_LIBS_USER')
[1] "C:/Users/Greg/Software/R/win-library/3.5"
and on R 3.6.0 devel, you'll get:
> Sys.getenv('R_LIBS_USER')
[1] "C:/Users/Greg/Software/R/win-library/3.6"
Importantly, if this folder does not exist, then R will silently ignore it, despite properly parsing and expanding R_LIBS_USER, e.g.
> Sys.getenv('R_LIBS_USER')
[1] "C:/Users/Greg/Software/R/win-library/3.5"
> dir.exists(Sys.getenv('R_LIBS_USER'))
[1] FALSE
and .libPaths()[1] will be incorrect. So, you need to create this folder once, e.g.
> Sys.getenv('R_LIBS_USER')
[1] "C:/Users/Greg/Software/R/win-library/3.5"
> dir.create(Sys.getenv('R_LIBS_USER'), recursive = TRUE)
> dir.exists(Sys.getenv('R_LIBS_USER'))
[1] TRUE
Then restart R, and you'll get:
> .libPaths()[1]
[1] "C:/Users/Greg/Software/R/win-library/3.5"