在工作中,我有一台运行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。感谢。
答案 0 :(得分:14)
当您在.RProfile
中加载库时,在附加 stats 包之前,它们会在R启动过程中很早就加入。另一方面,在加载统计信息后,您将附加 dplyr 。您可以通过键入?Startup
来了解R的启动过程。它说:
请注意,当网站和用户个人资料文件的来源仅加载基础包时,因此其他包中的对象需要通过以下方式引用: utils :: dump.frames或在明确加载相关包之后。
我已经看到Hadley建议不要在.RProfile
中加载包裹,因为这个原因,即包装加载顺序的差异,尽管我个人对此并不感兴趣。
一种可能的解决方案是在加载 dplyr 之前,在脚本中添加library(stats)
作为第一个库调用。
另一个(长期)选项可以更全面地避免这些问题,将工作流程从“大量脚本”转换为一个或多个包。
答案 1 :(得分:0)
我有完全相同的问题而且非常烦人。如果你想像我一样抑制警告信息:-),你可以加载library(dplyr, warn.conflicts = FALSE)
。