R: Updating .libPaths() on Ubuntu - r

I am trying to follow advice here & here, to update the location where R looks for installed packages. I have updated the variable .Library.site in the /etc/R/Rprofile.site file to include the location of the intended R package library directory:
Sys.setenv(".Library.site" = "~/AppData/R/x86_64-pc-linux-gnu-library/")
However, when I start up R, and do a .libPaths() the location is not appended to the list of library locations. Why?

Three answers:
Your approach is wrong. .libPath() is an R function, not an environment variable. What you do above above cannot work.
Per a consensus with (some members of) R Core, I have been setting the path to three location since circa 2003 for Debian / Ubuntu. That is done below /etc/R/ and you probably saw it.
The easiest to set a per-user directory would be via R_LIBS_USER which I typically comment-out as I like as users on a machine to have consistent paths. You can set it either in the global Renviron, or in the global Renviron.site (better) or in ~/.Renviron (probably best).
You do that via R_LIBS_USER="~/AppData/R/x86_64-pc-linux-gnu-library/".

Related

RStudio and R have different `~` (Home) directories

I have just updated my R version from 4.1.1 to 4.2.2. My problem is that RStudio (2022.07.2) is not appearing to process the .Renviron file correctly.
In other words, I get the following in the console:
> path.expand("~")
[1] "C:/Users/username/Documents"
> Sys.getenv("home")
[1] "C:/Users/username/OneDrive - Co Inc/Documents"
I suspect that a part of the problem was that version 4.1.1 was moved to a OneDrive folder by my company's IT department whereas 4.2.2 is not on a OneDrive folder.
The problem with RStudio not recognising ~ is that I refer to ~ numerous times in my existing code to point to the OneDrive directory and its numerous subfolders.
One thing that is odd is that I get the following when I run R directly.
> path.expand("~")
[1] "C:/Users/username/OneDrive - Co Inc/Documents"
I have searched my c: drive for .Renviron files and can only find 2:
Located in C:/Users/username/OneDrive - Co Inc, which I presume was created for 4.1.1.
Located in C:/Users/username, which I presume was created for 4.2.2.
Both of these version include the following lines:
RUSER=C:/Users/username/OneDrive - Co Inc/Documents
HOME=C:/Users/username/OneDrive - Co Inc/Documents
I've also checked both versions' copy of the .Rprofile files. Both include these lines:
Sys.setenv(HOME="C:/Users/username/OneDrive - Co Inc/Documents")
Sys.setenv(R_USER="C:/Users/username/OneDrive - Co Inc/Documents")
A workaround is to start every R script with the Sys.setenv(HOME="C:/Users/username/OneDrive - Co Inc/Documents"), though that would seem like it defeats the purpose of .Renviron.
I've spent literally hours googling to find a solution, which I suspect is related to migrating from a version inside OneDrive to one outside of OneDrive.
Pages that I've studied include (but not limited to):
https://support.posit.co/hc/en-us/articles/360047157094-Managing-R-with-Rprofile-Renviron-Rprofile-site-Renviron-site-rsession-conf-and-repos-conf
Cannot locate .Rprofile file
Tilde expansion in RStudio on Windows
RStudio home directory doesn't exist
Difference between tilde expansion in RStudio and R
Tilde "~" expression not functioning in "R"?
The documents say that on Windows, path.expand("~") will give the contents of the R_USER environment variable. The Windows FAQ also mentions that R looks at the HOME environment variable if R_USER is not set. If you are getting different results in RStudio vs. R, it must be because of some difference in those environment variables. The way to see their settings is to start a new session and run
Sys.getenv("HOME")
Sys.getenv("R_USER")
If you don't see any differences in the results between the two systems, then something very strange is going on, but I think you will. So the next step is to figure out where the difference came from.
You mention two .Renviron files containing settings for RUSER and HOME. If that's not a typo on the first one, then those files aren't setting R_USER (it's not the same as RUSER) and HOME looks the same,
so you need to look somewhere else for where R_USER is coming from.
There are several ways to set environment variables in Windows. I've never used Windows 11 so it's possible things have changed, but the basic methods in previous versions are these:
Set system-wide or user-specific environment variables in the "Settings".
Set session-specific environment variables in a command shell.
(Maybe, I forget...) Set shortcut-specific environment variables.
In R, there are also several different places to look for .Renviron or .Rprofile or one of the system versions of those files: see the ?Startup help page for the gory details. Somewhere in there you should find the bad setting that RStudio is using.

How stop RStudio from creating empty "R" folder within "/home" directory at every startup

After having set the path for the default working directory as well as my first (and only) project within RStudio options I wonder why RStudio keeps creating an empty folder named "R" within my "/home" directory every time it is started.
Is there any file I could delete/edit (eventually create) to stop this annoying behaviour and if so, where is it located ?
System: Linux Mint v. 19.3
Software: RStudio v. 1.3.959 / R version 3.4.4
Thanks in advance for any hints.
Yes, you can prevent the creation of the R directory — R is configurable via a set of environment variables.
However, setting these correctly isn’t trivial. The first issue is that many R packages are sensitive to the R version they’re installed with. If you upgrade R and try to load the existing package, it may break. Therefore, the R package library path should be specific to the R version.
On clusters, an additional issue is that the same library path might be read by various cluster nodes that run on different architectures; this is rare, but it happens. In such cases, compiled R packages might need to be different depending on the architecture.
Consequently, in general the R library path needs to be specific both to the R version and the system architecture.
Next, even if you configure an alternative path R will silently ignore it if it doesn’t exist. So be sure to manually create the directory that you’ve configured.
Lastly, where to put this configuration? One option would be to put it into the user environment file, the path of which can be specified with the environment variable R_ENVIRON_USER — it defaults to $HOME/.Renviron. This isn’t ideal though, because it means the user can’t temporarily override this setting when calling R: variables in this file override the calling environment.
Instead, I recommend setting this in the user profile (e.g. $HOME/.profile). However, when you use a desktop launcher to launch your RStudio, this file won’t be read, so be sure to edit your *.desktop file accordingly.1
So in sum, add the following to your $HOME/.profile:
export R_LIBS_USER=${XDG_DATA_HOME:-$HOME/.local/share}/R/%p-library/%v
And make sure this directory exists: re-source ~/.profile (launching a new shell inside the current one is not enough), and execute
mkdir -p "$(Rscript -e 'cat(Sys.getenv("R_LIBS_USER"))')"
The above is using the XDG base dir specification, which is the de-facto standard on Linux systems.2 The path is using the placeholders %p and %v. R will fill these in with the system platform and the R version (in the form major.minor), respectively.
If you want to use a custom R configuration file (“user profile”) and/or R environment file, I suggest setting their location in the same way, by configuring R_PROFILE_USER and R_ENVIRON_USER (since their default location, once again, is in the user home directory):
export R_PROFILE_USER=${XDG_CONFIG_HOME:-$HOME/.config}/R/rprofile
export R_ENVIRON_USER=${XDG_CONFIG_HOME:-$HOME/.config}/R/renviron
1 I don’t have a Linux desktop system but I believe that editing the Env entry to the following should do it:
Exec=env R_LIBS_USER=${XDG_DATA_HOME:-$HOME/.local/share}/R/%p-library/%v /path/to/rstudio
2 Other systems require different handling. On macOS, the canonical setting for the library location would be $HOME/Library/Application Support/R/library/%v. However, setting environment variables on macOS for GUI applications is frustratingly complicated.
On Windows, the canonical location is %LOCALAPPDATA%/R/library/%v. To set this variable, use [Environment]::SetEnvironmentVariable in PowerShell or, when using cmd.exe, use setx.

How can I use multiple library paths?

I'm trying to set up an easy to use R development environment for multiple users. R is installed along with a set of other dev tools on an NFS mount.
I want to create a core set of R packages that also live on NFS so n users don't need to install their own copies of the same packages n times. Then, I was hoping users can install one off packages to a local R library. Has anyone worked with an R setup like this before? From the doc, it looks doable by adding both the core package and personal package file paths to .libPaths().
You want to use the .Renviron file (see ?Startup).
There are three places to put the file:
Site wide in R_HOME/etc/Renviron.site
Local in either the current working directory or the home area
In this file you can specify R_LIBS and the R_LIBS_SITE environment variables.
For your particular problem, you probably want to add the NFS drive location to R_LIBS_SITE in the R_HOME/etc/Renviron.site file.
## To get R_HOME
Sys.getenv("R_HOME")

Specify different library path for different R version

Different versions of R have installed in the cluster. How can I set different library path for different R version?
UPDATE:
Thanks to #nicola, .libPaths() or library can set library path and help R find the specific location of packages.
Is there any way to do this in a system wide, like some system environment value. So I can start R and find the specific location automatically.

How do I change the default library path for R packages

I have attempted to install R and R studio on the local drive on my work computer as opposed to the organization network folder because anything that runs through the network is really slow. When installing, the destination path shows that it's my local C:drive. However, when I install a new package, the default path shown is my network drive and there is no option to change:
.libPaths()
[1] "\\\\The library/path/I/don't/want"
[2] "C:/Program Files/R/R-3.2.1/library"
I'm running windows 7 professional. How can I remove library path [1] and make path [2] my primary for all base packages and all new packages that I install?
Windows 7/10: If your C:\Program Files (or wherever R is installed) is blocked for writing, as mine is, then you'll get frustrated editing RProfile.site (as I did). As specified in the accepted answer, I updated R_LIBS_USER and it worked. However, even after reading the fine manual several times and extensive searching, it took me several hours to do this. In the spirit of saving someone else time...
Let's assume you want your packages to reside in C:\R\Library:
Create the folder C:\R\Library. Next I need to add this folder to the R_LIBS_USER path:
Click Start --> Control Panel --> User Accounts --> Change my environmental variables
The Environmental Variables window pops up. If you see R_LIBS_USER, highlight it and click Edit. Otherwise click New. Both actions open a window with fields for Variable and Value.
In my case, R_LIBS_USER was already there, and Value was a path to my desktop. I added to the path the folder that I created, separated by semicolon. C:\R\Library;C:\Users\Eric.Krantz\Desktop\R stuff\Packages.
(NOTE: In the last step, I could have removed the path to the Desktop location and simply left C:\R\Library).
See help(Startup) and help(.libPaths) as you have several possibilities where this may have gotten set. Among them are
setting R_LIBS_USER
assigning .libPaths() in .Rprofile or Rprofile.site
and more.
In this particular case you need to go backwards and unset whereever \\\\The library/path/I/don't/want is set.
To otherwise ignore it you need to override it use explicitly i.e. via
library("somePackage", lib.loc=.libPaths()[-1])
when loading a package.
Facing the very same problem (avoiding the default path in a network) I came up to this solution with the hints given in other answers.
The solution is editing the Rprofile file to overwrite the variable R_LIBS_USER which by default points to the home directory.
Here the steps:
Create the target destination folder for the libraries, e.g.,
~\target.
Find the Rprofile file. In my case it was at C:\Program Files\R\R-3.3.3\library\base\R\Rprofile.
Edit the file and change the definition the variable R_LIBS_USER. In my case, I replaced the this line file.path(Sys.getenv("R_USER"), "R", with file.path("~\target", "R",.
The documentation that support this solution is here
Original file with:
if(!nzchar(Sys.getenv("R_LIBS_USER")))
Sys.setenv(R_LIBS_USER=
file.path(Sys.getenv("R_USER"), "R",
"win-library",
paste(R.version$major,
sub("\\..*$", "", R.version$minor),
sep=".")
))
Modified file:
if(!nzchar(Sys.getenv("R_LIBS_USER")))
Sys.setenv(R_LIBS_USER=
file.path("~\target", "R",
"win-library",
paste(R.version$major,
sub("\\..*$", "", R.version$minor),
sep=".")
))
Windows 10 on a Network
Having your packages stored on the network drive can slow down the performance of R / R Studio considerably, and you spend a lot of time waiting for the libraries to load/install, due to the bottlenecks of having to retrieve and push data over the server back to your local host. See the following for instructions on how to create an .RProfile on your local machine:
Create a directory called C:\Users\xxxxxx\Documents\R\3.4 (or whatever R version you are using, and where you will store your local R packages- your directory location may be different than mine)
On R Console, type Sys.getenv("HOME") to get your home directory (this is where your .RProfile will be stored and R will always check there for packages- and this is on the network if packages are stored there)
Create a file called .Rprofile and place it in :\YOUR\HOME\DIRECTORY\ON_NETWORK (the directory you get after typing Sys.getenv("HOME") in R Console)
File contents of .Rprofile should be like this:
#search 2 places for packages- install new packages to first directory- load built-in packages from the second (this is from your base R package- will be different for some)
.libPaths(c("C:\Users\xxxxxx\Documents\R\3.4", "C:/Program Files/Microsoft/R Client/R_SERVER/library"))
message("*** Setting libPath to local hard drive ***")
#insert a sleep command at line 12 of the unpackPkgZip function. So, just after the package is unzipped.
trace(utils:::unpackPkgZip, quote(Sys.sleep(2)), at=12L, print=TRUE)
message("*** Add 2 second delay when installing packages, to accommodate virus scanner for R 3.4 (fixed in R 3.5+)***")
# fix problem with tcltk for sqldf package: https://github.com/ggrothendieck/sqldf#problem-involvling-tcltk
options(gsubfn.engine = "R")
message("*** Successfully loaded .Rprofile ***")
Restart R Studio and verify that you see that the messages above are displayed.
Now you can enjoy faster performance of your application on local host, vs. storing the packages on the network and slowing everything down.
I was struggling for a while with this as my work computer (with Windows 10) created the default user library on a network drive, which would slow down R and RStudio to an unusable state.
In case this helps someone, this is the easiest way I found, without requiring admin rights:
make sure the directory you want to install your packages into exists. If you want to respect the convention, use: C:\Users\username\R\win-library\rversion (for example, something like: C:\Users\janebloggs\R\win-library\3.6)
create a .Renviron file in your home directory (which might be on the network drive?), and in it, write one single line that defines the R_LIBS_USER variable to be your custom path:
R_LIBS_USER=C:\Users\janebloggs\R\win-library\3.6
(feel free to add comments too, with lines starting with #)
If a .Renviron file exists, R will read it at startup and use the variables as they are defined in there, before running the code in the .Rprofile. You can read about it in help(Startup).
Now it should be persistent between sessions!
After a couple of hours of trying to solve the issue in several ways, some of which are described here, for me (on Win 10) the option of creating a Renviron file worked, but a little different from what was written here above.
The task is to change the value of the variable R_LIBS_USER. To do this two steps needed:
Create the file named Renviron (without dot) in the folder \Program\etc\ (Program is the directory where R is installed--for example, for me it was C:\Program Files\R\R-4.0.0\etc)
Insert a line in Renviron with new path: R_LIBS_USER = "C:/R/Library"
After that, reboot R and use .libPaths() to confirm the default directory changed.
I think I tried all of the above and it didn't work for me. This worked, though:
In home directory, make a file called ".Renviron"
In that file, write:
.libPaths(new = "/my/path/to/libs")
Save and restart R if you had it open

Resources