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

时间:2014-11-14 16:57:09

标签: r dplyr

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

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

library(dplyr)
library(sqlutils)
library(RODBC)

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

.First <- function() {
    source("R/packages.R")
}

当我加载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

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

但是,如果我采用完全相同的设置,并在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

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

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

2 个答案:

答案 0 :(得分:14)

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

  

请注意,当网站和用户个人资料文件的来源仅加载基础包时,因此其他包中的对象需要通过以下方式引用: utils :: dump.frames或在明确加载相关包之后。

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

一种可能的解决方案是在加载 dplyr 之前,在脚本中添加library(stats)作为第一个库调用。

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

答案 1 :(得分:0)

我有完全相同的问题而且非常烦人。如果你想像我一样抑制警告信息:-),你可以加载library(dplyr, warn.conflicts = FALSE)