How to load packages in R automatically?
Solution 1
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.
Solution 2
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.
Solution 3
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.
Solution 4
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:
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 ingetOption("defaultPackages")
.-
Update the option defaultPackages: don't use
library()
in your .Rprofile, but something like.old <- getOption("defaultPackages") options(defaultPackages = c(old, "tidyverse"))
Comments
-
nhern121 almost 2 years
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. -
Josh O'Brien about 12 years+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. -
nhern121 about 12 yearsThanks @Ben Bolker I tried adding this line
library(foo)
in theRprofile.site
file and I'm no getting what I want. What do you mean withfoo
? What is that? Is it supposed to be a name for a determined package I want to load? -
Ben Bolker about 12 yearssorry;
foo
is an old-fashioned "placeholder" variable. For example, you might trylibrary("ggplot2"); library("emdbook"); library("quantreg"); library("rms")
(as examples of some real packages you might want to include). -
nhern121 about 12 yearsOk I appreciate your help in this case @BenBolker. Do you know how to do the same but with Rstudio?
-
Ben Bolker about 12 yearsI 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?
-
nhern121 about 12 yearsYes @BenBolker, I tried putting this line
options(defaultPackages=c(getOption("defaultPackages"), "tm","plyr","twitteR","sqldf"))
in myRprofile.site
and it's worked great using the standard Rgui. However, when I start Rstudio, those packages are not loaded. Many thanks! -
Ben Bolker about 12 yearsrstudio.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 atRprofile.site
or not. I would (1) try putting the startup code in your.Rprofile
(rather thanRprofile.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) -
nhern121 about 12 yearsMany 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. -
Jon Claus over 10 years@BenBolker, this doesn't seem to work with packages with inter-dependencies. Say package
A
depends on packageB
(with the DESCRIPTION file reflecting this). Puttinglibrary(A)
in the .Rprofile script causes an error to occur when installing packageB
. The same error occurs if I includelibrary(B)
or change thedefaultPackages
option instead. The exact error when installing packageB
isError: package ‘B’ is required by ‘A’ so will not be detached
. -
Ben Bolker over 10 yearsThis 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 ... -
Jon Claus over 10 yearsI 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.
-
Matifou over 6 yearsIndeed, R (studio) will load base packages after reading .Rprofile, so updating packages is safer, see my post below.
-
peter2108 over 4 yearsExecute path.expand("~") to see where you need to put your ..Rprofile file
-
brotherJ4mes almost 4 yearsThis 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
vssp::plot
). The.First.sys()
solution saved me a lot of headache... Thanks!