.Rprofile使用后仍会加载R默认包

6
我在RGui/RStudio中使用R 3.5.1,并在用户主目录中使用'.Rprofile'文件,其中只有一个条目来预加载'tidyverse'包:library(tidyverse)
当想要使用'dplyr'包的filter()函数时,它会被已经作为默认包加载的'stats'包的filter()函数掩盖,而这个过程发生在R启动过程中源代码'.Rprofile'之后。
这种行为似乎与?Startup所告诉我们的相矛盾:“请注意,在源代码网站和用户配置文件时,只有基本包被加载,因此需要通过例如utils::dump.frames或在显式加载相关包之后引用其他包中的对象。”
请问有人能告诉我,为什么即使使用用户配置文件,也会加载默认包如'stats'吗?非常感谢!

几个问题:1. 当您使用dplyr filter()时,它是否有效?2. 您的.Rprofile文件是否与其他库(例如stats)位于同一文件夹中?这很奇怪,因为我一直能够在加载stats包时使用dplyr filter()。 - Pryore
抱歉回复晚了!广告1:当通过在项目文件夹中加载“.Rprofile”时,先加载{dplyr},然后加载{stats}时,{dplyr} filter()不起作用,这很奇怪,因为由于“?Startup”,R只应该加载{base}。广告2:不,我的“.Rprofile”在Windows“文档”文件夹中的项目文件夹中,库{stats}在R文件夹“C:\Program Files\R\R-3.5.1\library\stats”中。是的,当{dplyr}在{stats}之后加载时,{dplyr} filter()总是有效的。 - Gregor Kvas
2个回答

2

我的问题已经在这里得到了回答:R dplyr filter not masking base filter? [duplicate]

如前所述,?Startup 的文档说明:

请注意,当源代码文件和用户配置文件被引用时,只有基本包会被加载,因此需要通过例如 utils::dump.frames 或显式加载相关的包来引用其他包中的对象。

不幸的是,这可能会被误解,因此最初导致了我的问题。短语“只有基本包被加载”的意思是,在启动过程中只有 base 包将作为第一个被加载的包,但是其他默认包(如 stats)将在源自用户 .Rprofile 文件的包之后被加载。

这就是为什么在启动过程中在用户 .Rprofile 文件中加载的 dplyr 包的 filter() 函数会被默认包 statsfilter() 函数掩盖的原因。


1

.Rprofile 在 R 加载基本库之前运行 首先加载 stats

library('stats', warn.conflicts = TRUE, verbose = TRUE) 
library('dplyr', warn.conflicts = TRUE, verbose = TRUE)

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