在工作中,我有一台运行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之前简单地在脚本中添加第一个库调用.
另一个(长期)选项可以更全面地避免这些问题,将工作流从"大量脚本集"转换为一个或多个包.
| 归档时间: |
|
| 查看次数: |
13320 次 |
| 最近记录: |