如何在R中自动加载包?

70

你能否给我推荐一种自动加载R包的方法?我的意思是,在启动R会话时,不需要多次使用library('package name')。假设我已经下载了我下次启动R时要使用的所有包。


6
通常这不是一个好主意,因为这会使得会话中的所有后续代码都依赖于你的设置,而如果库调用在其中,它将更加自包含。如果您试图与他人分享代码,则他们不太可能对您感到满意,因为他们将无法运行您的脚本而需要额外的说明。 - G. Grothendieck
1
你可以在你的.Rprofile/Rprofile.site文件中定义一个load_extra_packages()函数,加载你想要的所有包(并打印出它们的名称),然后在会话开始时运行该命令--这将使你的代码透明,即使不是完全自包含的... - Ben Bolker
4个回答

83
library(foo) 放入您的 .Rprofile 文件中,或设置 R_DEFAULT_PACKAGES:参见 ?Rprofile ...。
具体而言(因为 ?Rprofile 很长且可能令人生畏):
如果您想要在启动时使用与默认包不同的一组包,请在 .RprofileRprofile.site 文件中插入对 options 的调用。例如,options(defaultPackages = character()) 将不会在启动时附加任何额外的包(只有“base”包)(或在运行 R 之前将 R_DEFAULT_PACKAGES=NULL 设置为环境变量)。使用 options(defaultPackages = "")R_DEFAULT_PACKAGES="" 强制使用 R 系统默认设置。
由于您可能确实希望加载所有默认软件包,然后再添加额外的包(而不是不加载其中一些默认包),因此可以选择将以下内容放入 .Rprofile 文件中:
library("mypackage1")
library("mypackage2")
[etc.]

或者使用 options(defaultPackages=...)

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

在您的.Rprofile中添加您需要的软件包,以追加到标准默认值。

编辑(来自评论的复制)如何在Rstudio中使其工作: http://rstudio.org/docs/using/workspaces建议Rstudio执行.Rprofile,然后“执行R启动中描述的其他操作[ http://stat.ethz.ch/R-manual/R-patched/library/base/html/Startup.html ]”(与?Rprofile相同)。不确定它是否查看Rprofile.site

编辑#2:根据下面的评论,它可以在最新版本的Rstudio中使用。


2
“+1”是因为?Rprofile文档非常长,可能会让人感到有些吓人。但它也是一份非常紧凑且完整的文档,绝对值得推荐阅读。 - Josh O'Brien
4
抱歉;foo 是一个老式的“占位符”变量。例如,你可能会尝试 library("ggplot2"); library("emdbook"); library("quantreg"); library("rms") (作为一些你可能想要包含的真实软件包的示例)。 - Ben Bolker
@BenBolker,这似乎无法处理具有相互依赖关系的软件包。比如说,软件包A依赖于软件包B(在DESCRIPTION文件中反映出来)。将library(A)放入.Rprofile脚本中,在安装软件包B时会导致错误发生。如果我包括library(B)或更改defaultPackages选项,则会发生相同的错误。安装软件包B时出现的确切错误是Error: package ‘B’ is required by ‘A’ so will not be detached - Jon Claus
这似乎有点像一个“嗯,那就别这么做了”的情况……通常我会期望你在将软件包放入.Rprofile之前先安装它们。如果你对此有合理的用例,我建议你提出另一个问题来询问。 - Ben Bolker
我在调试期间使用它。基本上,我会频繁编辑和重新安装库。当开始新的R会话时,自动加载库可以节省我的时间。 - Jon Claus
显示剩余8条评论

17

有一个名为.Rprofile的文件,它实际上只是一个脚本,在每次启动一个新的R会话时都会运行。

你需要做的就是将library(package) 添加到其中。如果你使用的是Unix系统,它可能是一个隐藏文件,位于你的主目录下。


10

自定义R启动的Quick-R页面包含基本与Ben和Joao的答案相同的信息,但可能更加清晰。在您的主文件夹(Windows上的文档)中创建一个带有所需更改的Rprofile.site文件的副本,并将其命名为.Rprofile

编辑:我注意到R 3.0.0不再从“文档”文件夹中查找,而是在Windows 7下使用用户的主目录(用户名)。这可能是安装问题,但是在本答案中链接的Quick-R页面说明了正确的方法。如果其他人遇到此问题,则解决方案是将.Rprofile复制到用户的主目录中。


8
快速的答案是应该将你的R包放在.Rprofile文件中,正如大家建议的那样。
但请注意,R会读取这个文件,然后加载R基础包。参见?Startup
“请注意,当站点和用户配置文件被源时,只有基本程序包被加载。”
如果你想要加载的包增强/覆盖了一些R基础函数,这可能会引起问题。例如,使用tidyverse::filter:https://github.com/tidyverse/dplyr/issues/1611 我目前能看到两个解决方案:
  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"))
    

2
这个答案指出了其他人没有注意到的问题:加载顺序的重要性以及它对函数覆盖的影响(例如 plotsp::plot)。.First.sys() 的解决方案为我节省了很多麻烦...谢谢! - brotherJ4mes

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接