R dplyr过滤器没有屏蔽基础滤波器?

Cho*_*ens 12 r dplyr

在工作中,我有一台运行R 3.1.2的Windows 7计算机.

我有一个名为packages.R的文件.在我的这个文件中,我有以下代码:

library(dplyr)
library(sqlutils)
library(RODBC)
Run Code Online (Sandbox Code Playgroud)

我的.Rprofile包含一个名为.First的函数.

.First <- function() {
    source("R/packages.R")
}
Run Code Online (Sandbox Code Playgroud)

当我加载R时,我得到以下输出:

Loading required package: roxygen2
Loading required package: stringr
Loading required package: DBI

Attaching package: 'dplyr'

The following objects are masked from 'package:base':

    intersect, setdiff, setequal, union
Run Code Online (Sandbox Code Playgroud)

如果仔细观察,您会看到统计数据中的过滤器未被屏蔽.

但是,如果我采用完全相同的设置,并注释掉packages.R中的库(dplyr)语句,请保存文件,然后重新启动R,然后手动重新启动....就像在手中输入一样....

library(dplyr)

Attaching package: 'dplyr'

The following object is masked from 'package:stats':

    filter

The following objects are masked from 'package:base':

    intersect, setdiff, setequal, union
Run Code Online (Sandbox Code Playgroud)

现在,它掩盖了package :: stats.

我不明白.我需要在dplyr中大量使用filter命令来处理这个项目,我不想输入dplyr :: filter来使用它.有人可以帮助我的弱者理解为什么这样做会这样吗?我试过在RStudio和ESS中启动R,我在两者中都得到完全相同的行为.我也尝试将dplyr移动到packages.R文件的末尾,与结果没有区别.我只想屏蔽stats :: filter.谢谢.

jor*_*ran 15

当您加载库时,.RProfile它们会在R启动过程中很早地附加,在附加stats包之前.另一方面,你在加载统计数据后附加了dplyr.您可以通过键入来了解R的启动过程.它说:?Startup

请注意,当源站点和用户配置文件仅被加载时,基本包被加载,因此其他包中的对象需要通过例如utils :: dump.frames或在明确加载相关包之后引用.

我已经看到Hadley建议不要.RProfile因为这个原因加载包装,即包裹装载顺序的差异,尽管我个人对此并不感兴趣.

一种可能的解决方案是library(stats)在加载dplyr之前简单地在脚本中添加第一个库调用.

另一个(长期)选项可以更全面地避免这些问题,将工作流从"大量脚本集"转换为一个或多个包.