2014-11-14 69 views
8

在工作中,我有一台运行R 3.1.2的Windows 7计算机。R dplyr过滤器不屏蔽基本过滤器?

我有一个名为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 

如果在此仔细看,你会看到从统计过滤器没有被屏蔽。

但是,如果我采用完全相同的设置,并注释掉package.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。谢谢。

+1

当您在.RProfile中加载库时,它们会在R启动过程的很早时刻附加到stats包之前。另一种方式是,在统计信息已经加载完成之后,您将附加dplyr。我见过Hadley建议不要在.RP档中加载包(因为这个原因)(包加载顺序的差异)。 – joran 2014-11-14 17:03:03

+2

...我想你可以尝试在你正在采购.RProfile的脚本开始时加入'library(stats)'。 – joran 2014-11-14 17:05:34

+0

对于咧嘴笑声,我将library(stats)添加到我的packages.R文件中。但是,这似乎是一个不必要的复杂的事情必须做。我想我会将这两个命令从我的.First()中移出并将它们移到我所有分析文件的前面。我讨厌有一遍又一遍都充满了同样的事情的模板,但我想在这种情况下,这是更好的选择。 – Choens 2014-11-14 17:18:03

回答

10

当您在.RProfile中加载库时,它们会在R启动过程的很早时刻附加到统计信息包之前。另一种方式,你在附加dplyr统计已经被加载。我见过Hadley建议不要在.RProfile中加载包(因为这个原因)(包装加载顺序的差异),尽管我个人对此没有强烈的感受。 (R的启动过程的细节?Startup描述。)

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

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

0

我有完全相同的问题,它是如此讨厌。如果您想要像以前一样抑制警告消息:-),则可以使用library(dplyr, warn.conflicts = FALSE)加载。