How to load packages in R automatically?
Asked Answered
C

4

73

Could you suggest me a way for loading packages in R automatically? I mean, I want to start a session in R without needing to use library('package name') several times. Suppose I downloaded all packages I'll want to use the next time I start R.

Colicweed answered 24/4, 2012 at 15:10 Comment(2)
Normally this is not a good idea because it makes all subsequent code in the session dependent on your setup whereas if it had the library calls in it then it would be more self-contained. If you try to share your code with others they will not be very happy with you since they won't be able to run your scripts without additional instructions.Picul
You could define a load_extra_packages() function in your .Rprofile/Rprofile.site file that loaded all of the packages you wanted (and printed out their names), then run that command at the beginning of your sessions -- that would make your code transparent, if not completely self-contained ...Bowrah
B
84

Put library(foo) in your .Rprofile file or set R_DEFAULT_PACKAGES: see ?Rprofile ...

In particular (because ?Rprofile is long and potentially intimidating):

If you want a different set of packages than the default ones when you start, insert a call to ‘options’ in the ‘.Rprofile’ or ‘Rprofile.site’ file. For example, ‘options(defaultPackages = character())’ will attach no extra packages on startup (only the ‘base’ package) (or set ‘R_DEFAULT_PACKAGES=NULL’ as an environment variable before running R). Using ‘options(defaultPackages = "")’ or ‘R_DEFAULT_PACKAGES=""’ enforces the R system default.

Since you probably do want all of the default packages loaded, and then extra ones in addition (rather than, say, not loading some of the default packages), you can either put

library("mypackage1")
library("mypackage2")
[etc.]

or using options(defaultPackages=...):

options(defaultPackages=c(getOption("defaultPackages"),
       "mypackage1","mypackage2", ... [etc.]))

in your .Rprofile to append your desired packages to the standard defaults.

edit (copied from comment) re getting this to work in Rstudio: http://rstudio.org/docs/using/workspaces suggests that Rstudio executes .Rprofile and then "Performs the other actions described in R Startup [ http://stat.ethz.ch/R-manual/R-patched/library/base/html/Startup.html ]" (which is the same as ?Rprofile). It is ambiguous whether it looks at Rprofile.site or not.

edit #2: according to comment below, it does work with a recent version of Rstudio.

Bowrah answered 24/4, 2012 at 15:13 Comment(13)
+1 for 'because ?Rprofile is long and potentially intimidating'. It is that, and also a terrifically compact and complete piece of documentation. Definitely recommended reading.Spacetime
Thanks @Ben Bolker I tried adding this line library(foo) in the Rprofile.site file and I'm no getting what I want. What do you mean with foo? What is that? Is it supposed to be a name for a determined package I want to load?Colicweed
sorry; foo is an old-fashioned "placeholder" variable. For example, you might try library("ggplot2"); library("emdbook"); library("quantreg"); library("rms") (as examples of some real packages you might want to include).Bowrah
Ok I appreciate your help in this case @BenBolker. Do you know how to do the same but with Rstudio?Colicweed
I would expect that Rstudio would respect your Rprofile.site settings, but to be honest I'm not sure. Have you confirmed that you've got something working with the standard Rgui and that it doesn't work with Rstudio?Bowrah
Yes @BenBolker, I tried putting this line options(defaultPackages=c(getOption("defaultPackages"), "tm","plyr","twitteR","sqldf")) in my Rprofile.site and it's worked great using the standard Rgui. However, when I start Rstudio, those packages are not loaded. Many thanks!Colicweed
rstudio.org/docs/using/workspaces suggests that Rstudio executes .Rprofile and then "Performs the other actions described in R Startup [ stat.ethz.ch/R-manual/R-patched/library/base/html/Startup.html ]" (which is the same as ?Rprofile). It is ambiguous whether it looks at Rprofile.site or not. I would (1) try putting the startup code in your .Rprofile (rather than Rprofile.site); if that doesn't work, (2) update your question above to reflect this issue, and (3) ask at support.rstudio.org (referencing this question)Bowrah
Many thanks once again @BenBolker. I solved this issue by updating my Rstudio version and using the line options(defaultPackages=c(getOption("defaultPackages"), "tm","plyr","twitteR","sqldf")) in my Rprofile.site as you suggested me.Colicweed
@BenBolker, this doesn't seem to work with packages with inter-dependencies. Say package A depends on package B (with the DESCRIPTION file reflecting this). Putting library(A) in the .Rprofile script causes an error to occur when installing package B. The same error occurs if I include library(B) or change the defaultPackages option instead. The exact error when installing package B is Error: package ‘B’ is required by ‘A’ so will not be detached.Berni
This strikes me as a little bit of a "well, don't do that then" situation ... I would normally expect that you would install packages before putting them in your .Rprofile. If you have a sensible use case for this, I would suggest asking it as another question ...Bowrah
I was using it during debugging. Essentially, I would edit and re-install the library frequently. Having the libraries automatically load saves me time when beginning a new R session.Berni
Indeed, R (studio) will load base packages after reading .Rprofile, so updating packages is safer, see my post below.Began
Execute path.expand("~") to see where you need to put your ..Rprofile fileKalgoorlie
U
17

There is a file called .Rprofile that is nothing but a script that is run everytime you start a new session of R.

What you need to do is add library(package) to it. If you're using Unix, it's probably on your home folder as a hidden file.

Ubangi answered 24/4, 2012 at 15:15 Comment(0)
E
10

Quick-R page on customizing R startup contains basically the same information than in Ben's and Joao's answers, but it is perhaps a bit clearer. Create a copy of Rprofile.site file with desired changes in your home folder (Documents on Windows) and call it .Rprofile

EDIT: I noticed that R 3.0.0 does not look from Documents folder any longer, but uses user's home directory (user name) under Windows 7. This might be an installation issue, though (i.e. that I happened to install R "wrongly" previously). However, the Quick-R page linked in this answer tells the right way of doing this. If somebody else is encountering this problem, the solution is to copy .Rprofile to the user's home directory.

Engraft answered 5/2, 2013 at 13:7 Comment(0)
B
8

The quick answer is that you should put your R packages in the .Rprofile file, as everyone suggested.

Note however that R will read this file, and then load the R base packages. See from ?Startup:

Note that when the site and user profile files are sourced only the base package is loaded,

This can cause problems if the package you want to load enhances/overwrite some R base functions. See for example with tidyverse::filter: https://github.com/tidyverse/dplyr/issues/1611

I can see two solutions so far:

  1. Use .First.sys() at the first line of your .Rprofile file: this is the command that is usually run after reading the .Rprofile, that loads the packages in getOption("defaultPackages").

  2. Update the option defaultPackages: don't use library() in your .Rprofile, but something like.

    old <- getOption("defaultPackages")
    options(defaultPackages = c(old, "tidyverse"))
    
Began answered 22/2, 2018 at 23:31 Comment(1)
This answer identified something that others did not: the importance of the order of loading and it's impact on overwriting of functions (e.g. plot vs sp::plot). The .First.sys() solution saved me a lot of headache... Thanks!Registered

© 2022 - 2024 — McMap. All rights reserved.